說說設計模式~ 模版模式(Template)


返回目錄

模版模式,又被稱為模版方法模式,它可以將工作流程進行封裝,並且對外提供了個性化的控制,但主流程外界不能修改,也就是說,模版方法模式中,將工作的主體架構規定好,具體類可以根據自己的需要,各自去實現,這可能會讓我們想到策略模式,兩者有着本質的區別。

何時能用到它?

我們看一下策略模式的應用場景

1、 多個類只區別在表現行為不同,可以使用Strategy模式,在運行時動態選擇具體要執行的行為。
2、 需要在不同情況下使用不同的策略(算法),一般會定義一 個接口規范,使用不同的策略方式去實現它
3、 對客戶 隱藏具體策略(算法)的實現細節,彼此完全獨立。
而模版方法模式的應用場景
1、多個類區別在於主流程中的某個細節
2、客戶可以 自已實現模版里的抽象方法
3、對客戶 隱藏具體的實現流程(方法的組合的順序)

模版模式的結構圖

 

模版模式實現說明

OrderGenerator:模版模式基類,實現了某種業務的完整流程,其中一些核心方法已經實現,一些個性化方法被聲明為抽象方法,讓子類去實現。
B2COrderGenerator:B2C業務中去實現抽象方法
C2COrderGenerator:C2C業務中去實現抽象方法

模版模式的C#實現

 /// <summary>
    /// 模版核心類
    /// </summary>
    abstract class OrderGenerator
    {
        /// <summary>
        /// 核心處理流程
        /// </summary>
        public void Excute()
        {
            InsertData();
            ProcessException();
            InsertLog();
        }
        void InsertData()
        {
            Console.WriteLine("寫數據對外面隱藏");
        }
        void InsertLog()
        {
            Console.WriteLine("寫日志對外面隱藏");
        }
        /// <summary>
        /// 異常處理邏輯,對外面開放,可以自己建立自己的異常規范
        /// </summary>
        protected abstract void ProcessException();
    }

    /// <summary>
    /// b2c項目業務處理方法
    /// </summary>
    class B2COrderGenerator : OrderGenerator
    {
        protected override void ProcessException()
        {
            Console.WriteLine("b2c項目中訂單的異常處理方式");
        }
    }
    /// <summary>
    /// c2c項目業務處理方法
    /// </summary>
    class C2COrderGenerator : OrderGenerator
    {
        protected override void ProcessException()
        {
            Console.WriteLine("c2c項目中訂單的異常處理方法");
        }
    }

調用方法

       #region 模版方法調用
            OrderGenerator orderGenerator = new B2COrderGenerator();
            orderGenerator.Excute();
            #endregion

程序截圖

返回目錄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM