模板方法模式(Template Method Pattern),定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
AbstractClass 叫抽象模板,它的方法分为两类:基本方法、模板方法
为防止恶意的操作,一般模板方法都加上final关键字,不允许被覆写。
具体模板:实现父类所定义的抽象方法,也就是父类定义的基本方法在子类中得以实现。
package Template; /** *抽象模板类 * 2014-8-14上午10:51:32-limiracle */ public abstract class AbstractClass { //基本方法 protected abstract void doSomething(); //基本方法 protected abstract void doAnything(); //模板方法 public final void templateMethod(){ /* * 调用基本方法,完成相关的逻辑 */ this.doAnything(); this.doSomething(); } }
package Template; public class ConcreteClass extends AbstractClass { //实现基本方法 protected void doSomething() { //业务逻辑处理 } protected void doAnything() { //业务逻辑处理 } }
package Template; public class ConcreteClass1 extends AbstractClass { //实现基本方法 protected void doSomething() { //业务逻辑处理 } protected void doAnything() { //业务逻辑处理 } }
package Template; public class Main { public static void main(String[] args) { AbstractClass class1=new ConcreteClass1(); AbstractClass class2=new ConcreteClass(); //调用模板方法 class1.templateMethod(); class2.templateMethod(); } }
模板方法模式封装了不变的部分,扩展了可变的部分。它把认为是不变部分的算法封装到父类实现,而可变部分则可以通过继承来继续扩展。基本方法是由子类实现的,因此子类可以通过扩展的方式增加相应的功能,符合开闭原则。
按照我们的设计习惯,抽象类负责声明最抽象,最一般的事物属性和方法,实现类完成具体的事物属性和方法。但是模板方法模式却颠倒了,抽象类定义了部分抽象方法,由子类实现,子类代码执行的结果影响了父类的结果,也就是子类对父类产生了影响。
模板方法模式实现了父类依赖子类的场景。可以理解为父类调用了子类的具体方法。
模板方法模式(Template Method),布布扣,bubuko.com
原文:http://www.cnblogs.com/limiracle/p/3912085.html