java設計模式之模板方法模式

定義:Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm’s stucture. 即爲某一操作我們確定一種算法框架,但卻將其某些步驟延遲到子類完成,使得子類可以在不改變該算法架構的情況下確定其特定實現步驟。換句話說,父類將某操作拆分成多個細小的操作,而讓子類去確定如何完成這些細小的操作,父類只需要定義這些操作的執行順序,從而完成特定的事情
而在父類(稱爲抽象模板)中,這些被拆分得到的細小操作被稱爲基本方法,具體由子類去實現,而父類中實現的關於基本方法的調用順序的方法稱爲模板方法
首先,先列出一個典型的類圖:
這裏寫圖片描述
其中,AbstractClass爲抽象模板,其基本方法step0()和step1()由子類去實現,而在模板方法templateMethod()中定義了其調用過程。下面的例子以中西方吃飯過程爲例,看代碼:

/**
 * Created by Song on 2016/9/6.
 * 抽象模板
 */
public abstract class AbstractClass {
    //步驟0(基本方法)
    protectedabstract void step0();
    //步驟1(基本方法)
    protectedabstract void step1();
    //模板方法
    public void templateMethod(){
        //確定基本方法的調用順序,完成特定功能
        this.step0();
        this.step1();
    }
}
**
 * Created by Song on 2016/9/6.
 * 具體類1
 */
public class ConcreteClass1 extends AbstractClass {
    @Override
    protectedvoid step0() {
        System.out.println("步驟0:拿起筷子");
    }

    @Override
    protectedvoid step1() {
        System.out.println("步驟1:開始吃飯");
    }
}
**
 * Created by Song on 2016/9/6.
 */
public class ConcreteClass2 extends AbstractClass {
    @Override
    protectedvoid step0() {
        System.out.println("步驟0:拿起刀叉");
    }

    @Override
    protectedvoid step1() {
        System.out.println("步驟1:開始吃飯");
    }
}
**
 1. Created by Song on 2016/9/6.
 2. 測試類
 */
public class Main {
    public static void main(String [] args){
        //中國人的吃飯方式
        System.out.println("中國人吃飯過程:");
        AbstractClass chinese = new ConcreteClass1();
        chinese.templateMethod();
        //西方人的吃飯方式
        System.out.println("西方人吃飯過程:");
        AbstractClass foreigner = new ConcreteClass2();
        foreigner.templateMethod();
    }
}

執行結果:
這裏寫圖片描述
其典型特點爲:
1. 封裝不變部分,擴展可變部分
2. 行爲由父類控制,而具體細節由子類根據實際需要實現。

發佈了40 篇原創文章 · 獲贊 90 · 訪問量 37萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章