3.10設計模式之模板方法模式(Template Method)

3.10.1 模式意圖:

在系統有一些按照指定步驟執行的操作,這時如果將對應步驟的操作細節寫在一起,勢必會造成耦合度增加 ,不利于擴展,這時可以使用模板方法模式,抽象其中的順序步驟,將具體的操作細節留到對應的子類中。

3.10.2 模式概念:

它屬于行為型模式,定義一個操作中的算法骨架,將一些步驟延遲到子類中。模板方法使得子類可以不改變算法結構的同時,重新定義該算法的某些特定步驟。

3.10.3 模式元素:

  • 模板抽象(Template)
  • 模板細節(ConcreteTemplate)

3.10.4 代碼示例:

A.模板抽象類

    public abstract class Template
    {
        public void TemplateMethod()
        {
            StepOne();
            StepTwo();
            StepThree();
        }
        protected abstract void StepOne();
        protected abstract void StepTwo();
        protected abstract void StepThree();
    }

B.模板實現類

    public class ConcreteTemplate : Template
    {
        protected override void StepOne()
        {
            Debug.Log($"{nameof(StepOne)}:打開冰箱門");
        }

        protected override void StepTwo()
        {
            Debug.Log($"{nameof(StepOne)}:大象塞進去");
        }

        protected override void StepThree()
        {
            Debug.Log($"{nameof(StepOne)}:冰箱門關上");
        }
    }

示例代碼調用

    void UnitTest()
    {
        Template template = new ConcreteTemplate();
        template.TemplateMethod();
    }

打印日志

3.10.5 寫法對比:

3.10.6 模式分析:

模板方法抽象出對應操作步驟,使其操作抽象與操作細節分離,利于后期需求的變動,符合開閉原則。模板方法主要是利用override的特點,可以對新增步驟的變動以增量的形式添加,但也要注意隨之增加的子類數量,避免因覆蓋層級深、子類數量過多反而造成維護困難。

3.10.7 應用場景:

多個子類含有概念一致或執行步驟相同時,可以考慮使用模板方法模式。

3.10.8 小結:

模板方法在實際開發中使用的頻率較高,尤其是框架中自動注冊、加載、卸載的地方,都會見到模板方法模式的身影。


更多設計模式詳見:設計模式全家桶

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 設計模式概述 在學習面向對象七大設計原則時需要注意以下幾點:a) 高內聚、低耦合和單一職能的“沖突”實際上,這兩者...
    彥幀閱讀 3,796評論 0 14
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,779評論 18 399
  • 今天把小試牛刀又看了一遍 學習了語音抄錄 元面板和信息面板的區別等等
    糖遇杜盎司蜜閱讀 129評論 0 0
  • 我覺得我最近得了一種病,一種消費花錢的病,購買會使內心快樂,得到滿足,連等待的焦急都是開心的。我想這是一種病態了吧...
    文雯_閱讀 441評論 0 0
  • 這是怎么了?我這是在哪里?當我醒來,這些問題便竄進了我的腦海里,我不知道睡了有多久,只是感覺渾身疼得要命,我想站起...
    黑色塔羅閱讀 402評論 1 2