设计模式回顾系列文章: 主要针对工作中常用常见的设计模式进行整理、总结,同时分享以供大家拍砖。
------------------------------------------------
模板方法模式(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等可以使用模板的场景。