模板方法模式(Template Method Pattern)是一種簡單的、常見的且應用非常廣泛的模式。 定義: 定義一個操作中演算法的框架,而將一些步驟延遲到子類中。使得子類可以不改變一個演算法的結構即可重定義該演算法的某些特定步驟。 模板方法模式的類圖如下所示。 模板方法模式涉及兩個角色: 抽象模板( ...
模板方法模式(Template Method Pattern)是一種簡單的、常見的且應用非常廣泛的模式。
定義:
- 定義一個操作中演算法的框架,而將一些步驟延遲到子類中。使得子類可以不改變一個演算法的結構即可重定義該演算法的某些特定步驟。
模板方法模式的類圖如下所示。
模板方法模式涉及兩個角色:
- 抽象模板(Abstract Template)角色:定義一個或多個抽象操作,以便讓子類實現;這些抽象操作是基本操作,是一個頂級邏輯的組成步驟。還需要定義模板方法,這些模板方法一般是具體方法,即一個框架,實現對基本方法的調度,完成固定的邏輯,
- 具體模板(Concrete Template)角色:實現抽象模板中定義的抽象方法,不同具體模板可以給出不同的抽象方法實現,從而使頂級邏輯的實現各不相同。
AbstractClass.java
public abstract class AbstractClass { // 基本方法 protected abstract void operation(); // 模板方法 public void templateMethod() { // 調用基本方法,完成相關的邏輯 this.operation(); } }
ConcreteClass.java
public class ConcreteClass extends AbstractClass { @Override protected void operation() { System.out.println("具體模板方法業務邏輯執行了"); } }
Client.java
public class Client { public static void main(String[] args) { AbstractClass ac = new ConcreteClass(); ac.templateMethod(); } }
優點:
- 封裝不變部分,擴展可變部分。不變的部分封裝到父類中實現,而可變的部分則可以通過繼承進行擴展。
- 提取公共部分代碼,便於維護。將公共部分代碼抽取出來放在父類中,維護時只需要修改父類中的代碼。
- 行為由父類控制,子類實現。模板方法模式中的基本方法由子類實現,因此子類可以通過擴展增加相應的功能,符合開閉原則。
應用場景:
- 多個子類有公共方法,並且邏輯基本相同。
- 可以把重要的、複雜的、核心演算法設計為模板方法,周邊的相關細節功能則由各個子類實現。
- 重構時,模板方法模式是一個經常使用的模式,將相同的代碼抽取到父類中。
參考:
青島東合信息技術有限公司 . 設計模式(Java版) . 電子工業出版社,2012,112-114.