定义Define the skeleton of an algorithm in an operation,deferring some steps to subclasses.TemplateMethod lets subclasses redefine certain steps of an algorithm without changing the algorithm'sstructure.定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
模板方法模式非常简单,主要是用了Java的继承机制,话不多说,直接上代码
实现抽象模板类public abstract class AbstractClass { /** * 基本方法 */ protected abstract void doSomething(); /** * 基本方法,可以有默认实现 */ protected void doAnything() { System.out.println("AbstractClass doAnything()"); } /** * 模板方法,为了防止恶意的操作,一般模板方法都加上final关键字,不允许被覆写 */ public final void templateMethod(){ doSomething(); doAnything(); }}具体模板类public class ConcreteClassA extends AbstractClass { @Override protected void doSomething() { System.out.println("ConcreteClassA doSomething()"); } @Override protected void doAnything() { System.out.println("ConcreteClassA doAnything()->我不想使用父类的默认实现,我要覆盖它"); }}public class ConcreteClassB extends AbstractClass { @Override protected void doSomething() { System.out.println("ConcreteClassB doSomething()"); } // 使用父类doAnything()的默认实现}客户端代码public class Client { public static void main(String[] args) { AbstractClass a = new ConcreteClassA(); a.templateMethod(); AbstractClass b = new ConcreteClassB(); b.templateMethod(); }}优点封装不变部分,扩展可变部分提取公共部分代码,便于维护行为由父类控制,子类实现缺点子类影响父类按照我们的设计习惯,抽象类负责声明最抽象、最一般的事物属性和方法,实现类完成
...