定义:
定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
UML类图:
具体代码:
public class Client { public static void main(String[] args) { ConcreteClass cc = new ConcreteClass(); cc.init(); } } public abstract class AbstractClass { public abstract void operation1(); public abstract void operation2(); public void templateMeathod() { System.out.println("公共模板"); } public void init() { operation1(); templateMeathod(); operation2(); } } public class ConcreteClass extends AbstractClass { @Override public void operation1() { System.out.println("个性操作1"); } @Override public void operation2() { System.out.println("个性操作2"); } } 个性操作1 公共模板 个性操作2
模块说明:
AbstractClass:抽象类,定义整个流程算法的骨架。
ConcreteClass:具体类,实现流程算法里的具体步骤。
适用场景:
定制流程的比如,框架的初始化,对账等等。其中我们的项目对账里就是这样的,
对账先下载文件,校验文件,解析文件,录入拆分,比对数据等等,类似的就很适合应用模板方法模式。
优缺点:
优点:
实现了代码的复用。
缺点:
抽象类定义的模板与子类耦合度很高,不容易实现扩展。如果流程有变化,可能影响整个所有子类的调整。
总结:
代码复用,且固定算法流程。