设计模式回顾之三:模板方法模式(TemplateMethod)

设计模式回顾系列文章: 主要针对工作中常用常见的设计模式进行整理、总结,同时分享以供大家拍砖。

------------------------------------------------

模板方法模式(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等可以使用模板的场景。

猜你喜欢

转载自shensy.iteye.com/blog/1706974