模版模式,又被稱為模版方法模式,它可以將工作流程進行封裝,並且對外提供了個性化的控制,但主流程外界不能修改,也就是說,模版方法模式中,將工作的主體架構規定好,具體類可以根據自己的需要,各自去實現,這可能會讓我們想到策略模式,兩者有着本質的區別。
何時能用到它?
我們看一下策略模式的應用場景
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
程序截圖