`
阅读更多

An application framework allows you to inherit from a class or set of classes and create a new application, reusing most of the code in the existing classes and overriding one or more methods in order to customize the application to your needs. A fundamental concept in the application framework is the Template Method which is typically hidden beneath the covers and drives the application by calling the various methods in the base class (some of which you have overridden in order to create the application).

For example, whenever you create an applet you’re using an application framework: you inherit from JApplet and then override init( ) . The applet mechanism (which is a Template Method ) does the rest by drawing the screen, handling the event loop, resizing, etc.

An important characteristic of the Template Method is that it is defined in the base class and cannot be changed. It’s sometimes a private method but it’s virtually always final . It calls other base-class methods (the ones you override) in order to do its job, but it is usually called only as part of an initialization process (and thus the client programmer isn’t necessarily able to call it directly).

//: templatemethod:TemplateMethod.java

// Simple demonstration of Template Method.

package templatemethod;

import junit.framework.*;

 

abstract class ApplicationFramework {

  public ApplicationFramework() {

    templateMethod(); // Dangerous!

  }

  abstract void customize1();

  abstract void customize2();

  final void templateMethod() {

    for(int i = 0; i < 5; i++) {

      customize1();

      customize2();

    }

  }

}

 

// Create a new "application":

class MyApp extends ApplicationFramework {

  void customize1() {

    System.out.print("Hello ");

  }

  void customize2() {

    System.out.println("World!");

  }

}

 

public class TemplateMethod extends TestCase  {

  MyApp app = new MyApp();

  public void test() {

    // The MyApp constructor does all the work.

    // This just makes sure it will complete

    // without throwing an exception.

  }

  public static void main(String args[]) {

    junit.textui.TestRunner.run(TemplateMethod.class);

  }

} ///:~

The base-class constructor is responsible for performing the necessary initialization and then starting the “engine” (the template method) that runs the application (in a GUI application, this “engine” would be the main event loop). The client programmer simply provides definitions for customize1( ) and customize2( ) and the “application” is ready to run.

 

//上面的例子比较简单,很容易就能看明白,在时间当中可就没有那么容易。主要是体现在抽象函数的复杂性。我接触过的和能想到的实际应用就是:

<1> Servlet开发,只用你extends HttpServlet ,覆盖其中的doGet(),doPost()方法就好了。具体servlet的调用是由web服务器来完成的(服务器应用Template Method 模式隐藏了具体的数据连接、传输的过程,比如Socket连接等,这个只要稍微看看Tomcate的初始源码就可以了解了),只要你在自己实现函数中,将业务处理部分添加,然后,将实现类在web.xml中配置好就OK了,这个是一个很典型的应用;

<2> 此外就是JDBC中,jdbcTemplate开源应用中,应用的Template Method模式,就连接数据库,或者是启用数据源的应用部分封装在模板类中,而将具体的查询类接口通过DAO设计模式,暴露出来,同样,这个应用也是很典型的!

 

分享到:
评论

相关推荐

    20-Template Method.rar

    模板方法(Template Method)设计模式是一种行为型设计模式,它在面向对象编程中扮演着重要的角色。这个模式允许我们定义一个操作中的算法骨架,而将一些步骤延迟到子类中。这样,子类可以不改变一个算法的结构即可...

    留言板-express+art-template.zip

    &lt;form action="/submit" method="post"&gt; 作者"&gt; 留言内容"&gt; 提交 ``` 这段模板会遍历`messages`数组并展示每个留言的作者和内容。表单部分则是用户提交新留言的地方,当用户填写完信息并点击提交按钮时,会...

    template-method-demo 模板方法示例

    在"template-method-demo"这个示例中,我们可以预见到它将展示如何在Java中应用模板方法模式。这个压缩包可能包含以下内容: 1. 一个抽象类(例如:`AbstractClass`),它定义了模板方法。在这个类中,可能会有一个...

    TemplateMethod.rar

    标题“TemplateMethod.rar”暗示了这个压缩包包含的是关于Qt平台上实现模板方法设计模式的示例代码。Qt是一个跨平台的应用程序开发框架,常用于创建GUI程序,但也可用于非图形化的后台服务。 描述中的“模板方法...

    Leitura-Boleto-Template-Method:使用设计模式模板方法使用Java读取CSV文件-大学作业

    在本项目"Leitura-Boleto-Template-Method"中,我们主要关注的是如何运用设计模式中的模板方法(Template Method)来处理CSV文件,尤其是读取和解析银行票据(boleto)数据。这个大学作业的目标是让学生掌握设计模式...

    TemplateMethod.zip

    这个压缩包"TemplateMethod.zip"包含了关于C++实现模板方法设计模式的代码示例。 模板方法模式的核心思想是定义一个操作中的算法骨架,而将一些步骤延迟到子类中。它允许子类不改变一个算法的结构即可重定义该算法...

    -Java.-Template-Method-

    Java模板方法设计模式是面向对象设计中的一个关键概念,它属于行为设计模式,主要用于在抽象类中定义一个算法的框架,允许子类在不改变算法结构的情况下重定义具体步骤。这个设计模式的核心在于代码复用和封装算法的...

    设计模式C++学习之模板方法模式(Template Method)

    在这个例子中,`AbstractClass`是模板类,定义了`templateMethod`模板方法,它调用了`primitiveOperation1`、`primitiveOperation2`以及组件(Component)的`operation`方法。`ConcreteComponentA`和`...

    multiple-template-matching:使用opencv python进行多个模板匹配的示例代码

    result = cv2.matchTemplate(target_image, template, method) matches[method].append(result) ``` 3. **确定匹配区域**:为了找到最佳匹配,我们可以设置阈值,然后使用`cv2.minMaxLoc()`找出最大(或最小)值...

    geoinference-method-template

    任何地理推断子类都必须在 method.py 文件中显式地将其子类化,并实现其两个方法: “GIMethod.train_model(...)” 使用提供的设置、数据集和 model_dir 构建地理推理模型。 实现者可以使用这些设置来更好地控制...

    TemplateMethod Pattern.unitypackage

    TemplateMethod Pattern.unitypackage是一个模板方法模式的小栗子。

    practise-template-method-pattern:初学者的Java基本实践:继承

    Java面向对象初步练习:模版方法实战请按照指定要求完成 。在提交Pull Request之前,您可以在本地确保所有代码已经编译通过,并且通过了测试( mvn clean verify )注意!我们只允许您修改以下文件,对其他文件的...

    TemplateMethod 模式与代码重构

    TemplateMethod(模板方法)设计模式是一种行为设计模式,它在面向对象编程中扮演着重要的角色。这个模式允许我们在抽象类中定义一个算法的框架,同时允许子类在不改变算法结构的情况下重写算法中的特定步骤。通过...

    project-template-migration:此项目添加了可用于将Project Template项目从一个数据库迁移到另一个数据库的操作

    "project-template-migration"项目就是针对这种情况设计的一个工具,它专注于帮助用户将Project Template项目从一个数据库迁移到另一个数据库。这个项目的主要目标是提供一种高效、可靠的方法来管理和转移项目模板,...

    C#设计模式-吕震宇

    设计模式(21)-Template Method Pattern 设计模式(20)-Visitor Pattern 设计模式(19)-Observer Pattern 设计模式(18)-Command Pattern 设计模式(17)-Chain of Responsibility Pattern 设计模式(16)...

    Head First 设计模式 (八) 模板方法模式(Template Method pattern) C++实现

    在这个例子中,`AbstractClass`定义了`templateMethod`模板方法,其中`step1()`是具体实现,而`step2()`和`step3()`作为抽象方法由`ConcreteClass1`和`ConcreteClass2`这两个具体类来实现。这样,不同的具体类可以...

    精心整理的23种python设计模式代码

    代码都可以直接运行,部分设计模式有多种实现,主要的设计模式如下:...behavioral-observer,behavioral-publisher_subscriber,behavioral-template_method,behavioral-iterator等等,助力coding能力更上层楼

    Chio-s-Method-with-Cpp

    "Chio's Method"是一种在计算机科学中,特别是在C++编程语言...如果你想要了解更多关于Chio's Method的具体内容,可能需要查看提供的源代码文件"Chio-s-Method-with-Cpp-main",或者查找相关的文档或教程来进一步学习。

    Discovering Template Method Pattern in Google Android framework

    模板方法模式(Template Method Pattern)在Google Android框架中的应用是一个重要的设计模式实例,它允许开发者定义一个算法骨架,而将一些步骤延迟到子类中。这个模式的关键在于它定义了一个操作中的算法步骤,并...

Global site tag (gtag.js) - Google Analytics