Template Method Pattern
- 描述:搭建一个扩展性好的框架,使来自于一个接口的方法能够呈现或满足于不同的应用实例(或场景)
- 与之相关的设计模式:Factory Pattern,Strategy Pattern
- 在JDK中也有template method pattern的影子,比如java.io.InputStream的子类....
Template Method Pattern是开发过程使用率比较高的一种设计模式。因为经常会面临这样的问题,同一个功能接口,在不同的情况下,需要能够提供出不同的应用实现。比如:以一个债券类系统为例,在这个系统中存在这样的一个功能需求,要求计算出债券的每日价格。表面看上去似乎很简单,调用计算公式即可。问题并没有这么简单,在实际的债券发行市场上存在很多种不同类型的债券,各自的价格计算公式也不同。一个方法是不能满足所有债券的要求的。
当然,解决的方法也可以是在类中增加method的方式来不断满足各种债券价格计算的需要。这样做也是正确的,无可厚非。不过,正确的不一定是可行的,随着债券种类的增加,价格计算方法的调整,结果只有一个:程序依然正确运行,代码不断混乱,维护渐入步履维艰,Bug隐藏越来越深,程序员日渐崩溃.....
可行的解决方案是Template Method Pattern,Template Method Pattern做了两个方面的分离:
- 不同应用实现间的分离,而不是多交给一个类来完成,根据实现的不同由多个之类共同完成,各司其职
- 具体实现和外部调用的分离,提供一抽象接口,将具体实现隐藏,具体实现的变动不会影响全局
以上面提到的债券系统每日价格计算功能为例子,在Template Method Pattern下的类图表示为:
以下的代码与上图对应,能够体现Template Method Pattern的思想:
//Business.java
public class Business {
public void compute(String type) {
Formula formula = null;
if(type.equals("fix"))
{
formula = new FixBondFormula();
}else if(type.equals("float")){
formula = new FloatBondFormula();
}
formula.computePrice(); //computePrice方法就是所谓的模板方法(template method)
}
}
//Formula.java
public abstract class Formula {
public abstract void computePrice();
}
//FixBondFormula.java
public class FixBondFormula extends Formula {
private void fixMethod_1() {
System.out.println("fix 1");
}
private void fixMethod_2() {
System.out.println("fix 2");
}
public void computePrice() {
this.fixMethod_1();
this.fixMethod_2();
}
}
//FloatBondFormula.java
public class FloatBondFormula extends Formula {
private void floatMethod_1() {
System.out.println("float 1");
}
public void computePrice() {
this.floatMethod_1();
}
}
Template Method Pattern是父类实现处理的骨架,把具体的留给之类来做。至于在做的过程中,该分几步,如何做都交给之类全权负责了。
在程序设计和开发过程中,父类和子类的关系都是在不断地进行协调的,增加了父类的负担,子类的负担就减轻了,反之亦然,如何分担那又得根据实际情况来定夺了。毕竟,归根结底设计模式强调的是一种思想,而不是要求照本宣科的使用它。
- 大小: 23.7 KB
分享到:
相关推荐
设计模式C++学习之模板方法模式(Template Method)
Head First 设计模式 (八) 模板方法模式(Template Method pattern) C++实现
C++设计模式课件3_Template Method_模板方法.pdf
C++设计模式代码资源3_Template Method_模板方法.zip
主要为大家详细介绍了C++设计模式之模板方法模式TemplateMethod,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
模板方法模式是一种行为设计模式,它在一个方法中定义算法的骨架,将一些步骤延迟到子类中实现。 具体来说,模板方法模式的关键特点包括: 抽象类:在抽象类中定义一个模板方法,该方法给出了算法的框架。 具体...
《研磨设计模式》完整覆盖GoF讲述的23个设计模式并加以细细研磨。初级内容从基本讲起,包括每个模式的定义、功能、思路、结构、基本实现、运行调用顺序、基本应用示例等,让读者能系统、完整、准确地掌握每个模式,...
36种最新设计模式整理 Design Pattern: Simple Factory 模式 Design Pattern: Abstract Factory 模式 Design Pattern: Builder 模式 Design Pattern: Factory Method 模式 Design Pattern: Prototype 模式 ...
23种设计模式(Design Pattern)的C++实现范例,包括下面列出的各种模式,代码包含较详细注释。另外附上“设计模式迷你手册.chm” 供参考。 注:项目在 VS2008 下使用。 创建型: 抽象工厂模式(Abstract Factory) ...
Template Method.rarTemplate Method.rarTemplate Method.rarTemplate Method.rar模板设计模式
创建型模式用来处理对象的创建过程,主要包含以下5种设计模式: 工厂方法模式(Factory Method Pattern) 抽象工厂模式(Abstract Factory Pattern) 建造者模式(Builder Pattern) 原型模式...
第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、Abstract Factory、Factory Method、Singleton,Command、Adapter、Facade、TemplateMethod、Iterator、Composite、State、Proxy。最后三章比较...
工厂方法模式(Factory Method Pattern) 观察者模式(Observer Pattern) 建造者模式(Builder Pattern) 解释器模式(Interpreter Pattern) 命令模式(Command Pattern) 模板方法模式(Template Method Pattern) 桥接模式...
第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、AbstractFactory、FactoryMethod、Singleton,Command、Adapter、Facade、TemplateMethod、Iterator、Composite、State、Proxy。最后三章比较特别...
第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、Abstract Factory、Factory Method、Singleton,Command、Adapter、Facade、TemplateMethod、Iterator、Composite、State、Proxy。最后三章比较...
模板方法(Template Method) 14. 命令模式(Command Pattern) 15. 迭代器模式(Iterator Pattern) 16. 观察者模式(Observer Pattern) 17. 解释器模式(Interpreter Pattern) 18. 中介者模式(Mediator Pattern) 19. ...
第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、Abstract Factory、Factory Method、Singleton,Command、Adapter、Facade、TemplateMethod、Iterator、Composite、State、Proxy。最后三章比较...
设计模式(21)-Template Method Pattern 204 一、 模板方法(Template Method)模式 204 二、 模版方法模式的结构 204 三、 模板方法模式的示意性代码 205 四、 继承作为复用的工具 207 五、 一个实际应用模板方法...
设计模式(21)-Template Method Pattern 设计模式(20)-Visitor Pattern 设计模式(19)-Observer Pattern 设计模式(18)-Command Pattern 设计模式(17)-Chain of Responsibility Pattern 设计模式(16)...
第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、Abstract Factory、Factory Method、Singleton,Command、Adapter、Facade、TemplateMethod、Iterator、Composite、State、Proxy。最后三章比较...