- 概述:定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。TemplateMethod使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。
- 實用性:
-
- 一次性實現一個算法的不變的部分,並將可變的行爲留給子類來實現。
- 各子類中公共的行爲應被提取出來並集中到一個公共父類中以避免代碼重複。首先識別現有代碼中的不同之處,並且將不同之處分離爲新的操作。最後,用一個調用這些新的操作的模板方法來替換這些不同的代碼。
- 控制子類擴展。
- 參與者:
-
- AbstractClass:定義抽象的原語操作(primitiveoperation),具體的子類將重定義它們以實現一個算法的各步驟。實現一個模板方法,定義一個算法的骨架。該模板方法不僅調用原語操作,也調用定義在AbstractClass或其他對象中的操作。
- ConcreteClass:實現原語操作以完成算法中與特定子類相關的步驟。
- 類圖:
a
- 範例:
public class TemplatePatternTest {public static void main(String args[]) {Template temp = new TemplateConcrete();temp.update();
}}abstract class Template {public abstract void print();public void update() {System.out.println("開始打印");for (int i = 0; i < 10; i++) {print();}}}class TemplateConcrete extends Template {
@Overridepublic void print() {System.out.println("這是子類的實現");}}