固定模板,不同算法,就用『模板方法模式』

目錄:設計模式之小試牛刀
源碼路徑:Github-Design Pattern


定義(Template Method)

定義一個操作中算法的框架,而將一些步驟延遲到子類中。使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。

類圖

模板方法模式

啟示

組裝電腦一般包含三個部分,主機、顯示器、輸入設備(鍵鼠),而不同品牌電腦的組裝都各不相同,但是最終組裝成一部完整的電腦的步驟都是固定一樣的。定義抽象類,暴露主機、顯示器、輸入設備(鍵鼠)的組裝給具體廠商去實現(xiàn),提供一個公共的最終組裝方法。

代碼

/// <summary>
    /// 組裝電腦
    /// </summary>
    public abstract class AssembleComputer
    {
        /// <summary>
        /// 組裝主機
        /// </summary>
        public abstract void BuildMainFramePart();

        /// <summary>
        /// 組裝顯示器
        /// </summary>
        public abstract void BuildScreenPart();

        /// <summary>
        /// 組裝輸入設備(鍵鼠)
        /// </summary>
        public abstract void BuildInputPart();

        /// <summary>
        /// 組裝起來
        /// </summary>
        public void Assemble()
        {
            BuildMainFramePart();
            BuildScreenPart();
            BuildInputPart();
        }

    }

    /// <summary>
    /// 組裝HP電腦
    /// </summary>
    public class AssembleHpComputer : AssembleComputer
    {
        public override void BuildMainFramePart()
        {
            Console.WriteLine("組裝HP電腦的主板");
        }

        public override void BuildScreenPart()
        {
            Console.WriteLine("組裝HP電腦的顯示器");
        }

        public override void BuildInputPart()
        {
            Console.WriteLine("組裝HP電腦的鍵盤鼠標");
        }
    }

    /// <summary>
    /// 組裝HP電腦
    /// </summary>
    public class AssembleDellComputer : AssembleComputer
    {
        public override void BuildMainFramePart()
        {
            Console.WriteLine("組裝Dell電腦的主板");
        }

        public override void BuildScreenPart()
        {
            Console.WriteLine("組裝Dell電腦的顯示器");
        }

        public override void BuildInputPart()
        {
            Console.WriteLine("組裝Dell電腦的鍵盤鼠標");
        }
    }

優(yōu)缺點

實現(xiàn)了代碼復用,符合【OCP】
模板方法模式在抽象類中定義了算法的實現(xiàn)步驟,將這些步驟的實現(xiàn)延遲到具體子類中去實現(xiàn),從而使所有子類復用了父類的代碼,所以模板方法模式是基于繼承的一種實現(xiàn)代碼復用的技術。

應用場景

當創(chuàng)建復雜對象的算法應該獨立于該對象的組成部分以及它們的裝配方式時。當構造過程必須允許被構造的對象有不同的表示時。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,082評論 25 709
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,624評論 30 472
  • 設計模式基本原則 開放-封閉原則(OCP),是說軟件實體(類、模塊、函數(shù)等等)應該可以拓展,但是不可修改。開-閉原...
    西山薄涼閱讀 4,081評論 3 14
  • BaHUHUH閱讀 290評論 0 0
  • 晚上跟老師上夜班 要查看今日新住院的病人們 查到最后一個 一老婦人坐在床上 抱著個今天溺水進院的小朋友 背后還有躺...
    阿敏姑娘閱讀 162評論 0 0

友情鏈接更多精彩內(nèi)容