一、概述
定義一個操作中算法的框架,而將一些步驟延遲到子類中。模板方法模式使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。它是一種類行爲型模式。
二、適用場景
適用於對一些複雜的操作/算法進行步驟分割、抽取公共部分由抽象父類實現、將不同部分在父類模板方法中定義抽象實現、而將具體的實現過程由子類完成。
三、UML類圖
四、參與者
1>、AbstractClass(抽象類):提供模板方法、並且定義算法框架。
2>、ConcreteClass(具體子類):它是抽象類的子類,用於實現在父類中聲明的抽象基本操作以完成子類特定算法的步驟,也可以覆蓋在父類中已經實現的具體基本操作。
五、用例學習
1、抽象父類:AbstractClass.java
/**
* JAVA設計模式之 模板方法模式
* 抽象類:提供模板方法
* @author [email protected]
*
*/
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 [email protected]
*
*/
public class ConcreteClass extends AbstractClass {
@Override
protected void Operation2() {
// 實現父類中模板方法中的步驟二的具體算法/邏輯
}
@Override
protected void Operation3() {
// 實現父類中模板方法中的步驟三的具體算法/邏輯
}
}
六、其他
模板方法模式是結構最簡單的行爲型設計模式,在其結構中只存在父類與子類之間的繼承關係。通過使用模板方法模式,可以將一些複雜流程的實現步驟封裝在一系列基本方法中,在抽象父類中提供一個稱之爲模板方法的方法來定義這些基本方法的執行次序,而通過其子類來覆蓋某些步驟,從而使得相同的算法框架可以有不同的執行結果。模板方法模式提供了一個模板方法來定義算法框架,而某些具體步驟的實現可以在其子類中完成。