设计模式回顾系列文章: 主要针对工作中常用常见的设计模式进行整理、总结,同时分享以供大家拍砖。
------------------------------------------------
模板方法模式(TemplateMethod)
定义一个操作中算法的骨架,而将一些步骤延迟到子类中,不改变算法的结构而重定义它的步骤。
允许定义可变的子步骤,同时保持基本过程一致。
TemplateMethod模式由一个抽象类组成,这个抽象类定义了需要覆盖的基本TemplateMethod方法。每个从这个抽象类派生的具体类将为此抽象类实现新方法。
程序实现:
抽象类Algorithm.java:定义算法执行步骤(templateMethod方法),以及部分步骤的实现(doStep2)。
public abstract class Algorithm{ public void templateMethod(){ doStep1(); doStep2(); doStep3(); doStep4(); doStep5(); } public abstract void doStep1(); public abstract void doStep4(); public abstract void doStep5(); public void doStep2(){ System.out.println("Default Step 2!"); } public void doStep3(){ System.out.println("Default Step 3!"); } }
实体算法类1:继承模板类Algorithm,同时实现模板中未实现的步骤,可以覆写已定义的步骤。
public class CustomAlgorithm1 extends Algorithm{ public void doStep1(){ System.out.println("CustomAlgorithm1 Step1"); } public void doStep4(){ System.out.println("CustomAlgorithm1 Step4"); } public void doStep5(){ System.out.println("CustomAlgorithm1 Step5"); } }
实体算法类2:同实体算法类1。
public class CustomAlgorithm2 extends Algorithm{ public void doStep1() { System.out.println("CustomAlgorithm2 Step1"); } public void doStep4() { System.out.println("CustomAlgorithm2 Step4"); } public void doStep5() { System.out.println("CustomAlgorithm2 Step5"); } }
入口main方法:
public static void main(String[] args){ Algorithm algorithm=new CustomAlgorithm1(); algorithm.templateMethod(); algorithm=new CustomAlgorithm2(); algorithm.templateMethod(); }
此时因多态机制,会分别执行不同的算法步骤。
举例:JdbcTemplate、HibernateTemplate、SocketTemplate等可以使用模板的场景。