設計模式——模板方法

定義

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

模板

模板方法比較簡單,第一次聽到這個概念的時候,發現原來本身一種用的叫作模板方法。
就是在抽象類中實現模板方法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. 代碼閱讀難度增大(須要到子類中找實現)

注意: 抽象過分可能會致使後期擴展麻煩,儘可能保證模板流程之後不會再變動設計

相關文章
相關標籤/搜索