設計模式——模板方法

定義

就是定義算法骨架的方法 具體的操作:在模板中直接實現某些步驟的方法,通常這些步驟的實現算法是固定的,而且是不怎麼變化的,因此就可以當作公共功能實現在模板裏面。
其實寫設計模式的系列筆記就是一種模板方法,每篇文章的流程(目錄)都是一樣的,我實現了每個部分的具體細節。

模板

模板方法比較簡單,第一次聽到這個概念的時候,發現原來自己一種用的叫做模板方法。
就是在抽象類中實現模板方法TemplateMethod,而這個方法裏面具體用到了多個具體流程如PrimitiveOperation1/PrimitiveOperation2, 子類只要繼承抽象模板並且實現具體流程,就能對外提供模板方法的能力。

實例

abstract class Shoping {
    // 模板方法,由父類實現,可以定義爲final
    public final void buyGood() {
       login();
       order();
       pay();
    }
    
    abstract void login();
    abstract void order();
    abstract void pay();
}

JingdongBuy extends Shoping {
    public void login() {
        Log.d("登錄京東賬號");
    }

    public void order() {
        Log.d("生成京東訂單");
    }

    public void pay() {
        Log.d("使用京東白條支付");
    }
}

TaobaoBuy extends Shoping {
    public void login() {
        Log.d("登錄淘寶賬號");
    }

    public void order() {
        Log.d("生成淘寶訂單");
    }

    public void pay() {
        Log.d("使用支付寶支付");
    }
}

優點

模板方法注重抽象不同操作之間的共同點,剖離不同點。
求同存異: 將共同點在抽象類中實現,不同的具體實現保留在各個子類。

  1. 減少重複代碼,發便後續擴展與維護
  2. 符合開閉原則,子類可以對功能進行擴展

缺點

  1. 增加抽象類
  2. 代碼閱讀難度增大(需要到子類中找實現)

注意: 抽象過度可能會導致後期擴展麻煩,儘量保證模板流程以後不會再變更

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章