`

Java与模式之模板方法(Template Method)模式

阅读更多

    模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造子的形式实现,然后声明一些抽象的方法迫使子类实现剩余的逻辑。不同的子类可以有不同的实现,这是模板方法的用意。而我认为其精髓在于在抽象类中定义的模板方法,此方法为抽象类中其他方法的一个有序的汇总。

 

   模板方法模式的静态结构如下图所示:

 

 

 

   这里涉及到2个角色:

   抽象模板角色有如下责任:

  1. 定义了一个或多个抽象操作,以便让子类实现。这些抽象操作叫做基本操作,它们是顶级逻辑的组成部分。
  2. 定义并实现了一个模板方法。它给出了一个顶级逻辑的骨架,而逻辑的部分组成步骤在相应的抽象操作中,推迟到子类实现。顶级逻辑也有可能调用一些具体的方法。

   具体模板角色有如下责任:

  1. 实现了父类定义的一个或多个抽象方法,它们是一个顶级逻辑的组成步骤。   
  2. 每一个抽象模板角色都可以有任意多个具体模板角色与之对应,而每一个具体模板角色都可以给出这些抽象方法的不同实现,从而使得顶级逻辑的实现各不相同。

    示意性源码如下:

    首先抽象模板角色提供了一个具体的方法(也即所谓的模板方法) TemplateMethod(),此方法按一定顺序调用了其他方法(包括抽象方法和具体方法)

 

public abstract class AbstractClass {
	/**
	 * 模板方法
	 */
	public void TemplateMethod(){
		//  调用基本方法(由子类实现)
		doOperation1();
		//  调用基本方法(已实现)
		doOperation3();
		//  调用基本方法(由子类实现)
		doOperation2();
	}
	/**
	 * 基本方法声明,由子类实现
	 */
	protected abstract void doOperation1();
	/**
	 * 基本方法,已实现
	 */
	private void doOperation3(){
		System.out.println("doOperation3()");
		// do somethings
	}
	/**
	 * 基本方法声明,由子类实现
	 */
	protected abstract void doOperation2();
}
 

    显然doOperation1(),doOperation2()等基本方法是模板方法的组成部分,抽象模板自己并不给出这些抽象方法的实现,而是把这些方法交给子类去实现。

 

public class ConcreteClass extends AbstractClass {
	/**
	 * 基本方法的实现
	 */
	@Override
	protected void doOperation1() {
		// do somethings
		System.out.println("doOperation1()");

	}
	/**
	 * 基本方法的实现
	 */
	@Override
	protected void doOperation2() {
		// do somethings
		System.out.println("doOperation2()");
	}
}
 

   这个具体模板角色实现了父类所声明的抽象方法doOperation1(),doOperation2(),而这2个方法的代表的就是强制子类实现的剩余逻辑

 

模板方法模式的应用

    HttpServlet技术是建立在模板方法模式的基础之上的。HttpServlet类提供了一个service()方法。这个方法调用了7个do方法中的一个或几个,完成对客户端调用的处理。这些do方法则要求由具体的子类来实现。在这里service()方法便是模板方法,7个do方法便是基本方法。因HttpServlet对7个do方法都提供了默认实现,所以子类只是选择性的覆盖这些do方法而已,最常见的是覆盖doGet(),doPost()方法,这样每个子类就可以实现自己的业务逻辑。

 

参考书籍:Java与模式

 

  • 大小: 24.1 KB
分享到:
评论

相关推荐

    template-method-demo 模板方法示例

    template-method-demo 模板方法示例

    模板方法模式(TemplateMethod)原理图

    模板方法模式是一种行为设计模式,它在一个方法中定义算法的骨架,将一些步骤延迟到子类中实现。 具体来说,模板方法模式的关键特点包括: 抽象类:在抽象类中定义一个模板方法,该方法给出了算法的框架。 具体...

    JAVA设计模式(模板方法模式)—视频

    模版方法模式(Template Method) 准备一个抽象类,将部分逻辑以具体方法的形式实现,然后申明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现...

    java设计模式教程+源代码

    AbstractFactory ( 抽象工厂 ) FactoryMethod ( 工厂方法 ) Singleton ( 单态模式 ) Builder ( 建造者模式 ) Prototype ( 原型模式 ) ...TemplateMethod ( 模板方法 ) Visitor ( 访问者模式 )

    [Java设计模式(第2版)(Design.Patterns.in.Java).John.Metsker

    第21章 模板方法(template method)模式 182 第22章 状态(state)模式 193 第23章 策略(strategy)模式 204 第24章 命令(command)模式 213 第25章 解释器(interpreter)模式 221 第26章 扩展型模式介绍 236 第27章 装饰...

    Java24种设计模式,Java24种设计模式,24种设计模式,学会了这24种设计模式,可以打遍天下无敌手,设计模式非常重要

    9、模板方法模式TEMPLATE METHOD PATTERN 10、建造者模式BUILDER PATTERN 11、桥梁模式BRIDGE PATTERN 12、命令模式COMMAND PATTERN 13、装饰模式DECORATOR PATTERN 14、迭代器模式ITERATOR PATTERN 15、组合...

    Java面试 java设计模式整理 单例、工厂、策略等 面试使用,学习使用

    14、模板方法模式(Template Method) 13 15、观察者模式(Observer) 14 16、迭代子模式(Iterator) 16 17、责任链模式(Chain of Responsibility) 18 18、命令模式(Command) 19 19、备忘录模式(Memento) 21 ...

    JAVA设计模式.rar

    模板方法模式【TEMPLATE METHOD PATTERN】  建造者模式【BUILDER PATTERN】 桥梁模式【BRIDGE PATTERN】  命令模式【COMMAND PATTERN】  装饰模式【DECORATOR PATTERN】 迭代器模式【ITERATOR ...

    java版本二十三种设计模式.zip

    - 模板方法模式(Template Method) - 策略模式(Strategy) - 责任链模式(Chain of Responsibility) - 中介者模式(Mediator) - 访问者模式(Visitor) - 命令模式(Command) - 解释器模式(Interpreter) - 迭代器...

    Java设计模式,并加上个人理解

    8. 模板方法模式 (Template Pattern) 9. 建造者模式 (Builder Pattern) 10. 原型模式 (Prototype Pattern) 11. 组合模式 (Composite Pattern) 12. 装饰者模式 (Decorator Pattern) 13. 访问者模式 ...

    Java高手真经 - Java Web系统设计与架构 源代码(一)设计模式

    pattern/src/behavior/templatemethod //13.2模板方法模式 pattern/src/behavior/observer //13.3观察者模式 pattern/src/behavior/iterator //13.4迭代子模式 pattern/src/behavior/chainofresponsibility//13.5...

    java之23种设计模式

    设计模式之Java实现源码,其中包含三大类,23种,分别为创建型 1. Factory Method(工厂方法) 2. Abstract Factory(抽象工厂) 3. Builder(建造者) 4. Prototype(原型) 5. Singleton(单例) 结构型 6. ...

    JAVA经典设计模式大全

    5.10 TEMPLATE METHOD(模板方法) —类行为型模式 214 5.11 VISITOR(访问者)—对象行为型 模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 228 5.12.3 通信应该被封装还是被...

    设计模式_java语言中的应用

    主要内容有:Iterator-迭代器、Adapter(适配器)、Template Method(模板方法)、Factory Method(工厂方法)、Abstract Factory(抽象工厂)等。

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

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

    design-pattern-java.pdf

    算法的封装与切换——策略模式(四) 模板方法模式-Template Method Pattern 模板方法模式深度解析(一) 模板方法模式深度解析(二) 模板方法模式深度解析(三) 访问者模式-Visitor Pattern 操作复杂对象结构——...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷8

    pattern/src/behavior/strategy //13.1策略模式 pattern/src/behavior/templatemethod //13.2模板方法模式 pattern/src/behavior/observer //13.3观察者模式 pattern/src/behavior/iterator //13.4迭代子模式 ...

    设计模式文档

    5.10 TEMPLATE METHOD(模板方法) —类行为型模式 214 5.11 VISITOR(访问者)—对象行为型 模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 228 5.12.3 通信应该被封装还是被分布 229 ...

    eclipse java注释模板

    </template><template autoinsert="true" context="filecomment_context" deleted="false" description="已创建的 Java 文件的注释" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.filecomment" name=...

    源码:阎宏设计模式光盘

    源代码清单(按照库排列) ...com.javapatterns.templatemethod 模板方法模式 com.javapatterns.uml 统一建模语言UML介绍 com.javapatterns.visitor 访问者模式 com.javapatterns.windowadapter 缺省适配模式 ...

Global site tag (gtag.js) - Google Analytics