模板方法模式-Template Method
名称:
模板方法模式(Template Method Pattern)-类行为型模式
问题:
The Template Method pattern provides a method that allows subclasses to override parts of the method without rewriting it. Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template method lets subclasses redefine certain steps of an algorithm without changing the structure of the algorithm.
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
适用性:
-一次性实现一个算法的不变的部分,并将可变得行为留给子类来实现。
-各子类中公共的行为应被提取出来并集中到一个公共父类中以避免重复。
-控制子类扩展。模版方法只在特定点调用“hook”操作。
协作:
ConcreteClass靠AbstractClass来实现算法中不变的步骤。
优点和缺点:
1、模板方法是一种代码复用的基本技术。
2、模板方法导致一种反向的控制结构。
解决方案:
1、 模式的参与者
1、AbstractClass
-定义抽象的原语操作,具体的子类将重新定义它们以实现一个算法的各步骤
-实现一个模版方法,定义一个算法的骨架。该模版方法不仅调用原语操作,也调用定义在AbstractClass或其他对象中的操作。
2、ConcreteClass
-实现原语操作以完成算法中与特定子类相关步骤。
2.实现方式
abstract class AbstractClass { public void TemplateMethod() { SpecificMethod(); abstractMethod1(); abstractMethod2(); } public void SpecificMethod() { System.out.println(AbstractClass special method."); } public abstract void abstractMethod1(); public abstract void abstractMethod2(); }
class ConcreteClass extends AbstractClass { public void abstractMethod1() { System.out.println("concrete method1"); } public void abstractMethod2() { System.out.println("concrete method 2"); } }
参考资料
《设计模式:可复用面向对象软件的基础》