JAVA設計模式之 模板方法模式【Template Method Pattern】

小呂-ICE發表於2014-11-11

一、概述

    定義一個操作中演算法的框架,而將一些步驟延遲到子類中。模板方法模式使得子類可以不改變一個演算法的結構即可重定義該演算法的某些特定步驟。它是一種類行為型模式。


二、適用場景

    適用於對一些複雜的操作/演算法進行步驟分割、抽取公共部分由抽象父類實現、將不同部分在父類别範本方法中定義抽象實現、而將具體的實現過程由子類完成。


三、UML類圖

    

四、參與者

1>、AbstractClass(抽象類):提供模板方法、並且定義演算法框架。

2>、ConcreteClass(具體子類):它是抽象類的子類,用於實現在父類中宣告的抽象基本操作以完成子類特定演算法的步驟,也可以覆蓋在父類中已經實現的具體基本操作。


五、用例學習

1、抽象父類:AbstractClass.java

/**
 * JAVA設計模式之 模板方法模式
 * 抽象類:提供模板方法
 * @author  lvzb.software@qq.com
 *
 */
public abstract class AbstractClass {
	
	/**
	 * 模板方法<br/>
	 * 定義/封裝複雜流程/操作的實現步驟和執行次序
	 */
	public void TemplateMethod(){
		Operation1();
		Operation2();
		Operation3();
	}
	
	/**
	 * 演算法/操作一<br/>
	 * 公用的實現邏輯
	 */
	protected void Operation1() {
	    // 完成操作一的具體演算法/邏輯實現
	}
	
	/**
	 * 演算法/操作二<br/>
	 * 提供抽象方法,具體的演算法/邏輯實現由子類去完成
	 */
	protected abstract void Operation2();
	
	/**
	 * 演算法/操作三<br/>
	 * 提供抽象方法,具體的演算法/邏輯實現由子類去完成
	 */
	protected abstract void Operation3();

}

2、具體子類:ConcreteClass.java

/**
 * 具體子類<br/>
 * 實現抽象類的抽象方法,完成具體的演算法/邏輯
 * @author  lvzb.software@qq.com
 *
 */
public class ConcreteClass extends AbstractClass {

	@Override
	protected void Operation2() {
		// 實現父類中模板方法中的步驟二的具體演算法/邏輯
	}

	@Override
	protected void Operation3() {
		// 實現父類中模板方法中的步驟三的具體演算法/邏輯
	}

}

六、其他

    模板方法模式是結構最簡單的行為型設計模式,在其結構中只存在父類與子類之間的繼承關係。通過使用模板方法模式,可以將一些複雜流程的實現步驟封裝在一系列基本方法中,在抽象父類中提供一個稱之為模板方法的方法來定義這些基本方法的執行次序,而通過其子類來覆蓋某些步驟,從而使得相同的演算法框架可以有不同的執行結果。模板方法模式提供了一個模板方法來定義演算法框架,而某些具體步驟的實現可以在其子類中完成。




相關文章