C#設計模式之行為類模式:模板方法模式
阿新 • • 發佈:2017-11-29
frame 應該 ocp 方式 src 代碼復用 操作 優缺點 sse
定義(Template Method)
定義一個操作中算法的框架,而將一些步驟延遲到子類中。使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。
啟示
組裝電腦一般包含三個部分,主機、顯示器、輸入設備(鍵鼠),而不同品牌電腦的組裝都各不相同,但是最終組裝成一部完整的電腦的步驟都是固定一樣的。定義抽象類,暴露主機、顯示器、輸入設備(鍵鼠)的組裝給具體廠商去實現,提供一個公共的最終組裝方法。
/// <summary> /// 組裝電腦 /// </summary> public abstract class AssembleComputer {/// <summary> /// 組裝主機 /// </summary> public abstract void BuildMainFramePart(); /// <summary> /// 組裝顯示器 /// </summary> public abstract void BuildScreenPart(); /// <summary> /// 組裝輸入設備(鍵鼠) /// </summary> publicabstract 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> /// 組裝DELL電腦 /// </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電腦的鍵盤鼠標"); } }
優缺點
實現了代碼復用,符合【OCP】
模板方法模式在抽象類中定義了算法的實現步驟,將這些步驟的實現延遲到具體子類中去實現,從而使所有子類復用了父類的代碼,所以模板方法模式是基於繼承的一種實現代碼復用的技術。
應用場景
當創建復雜對象的算法應該獨立於該對象的組成部分以及它們的裝配方式時。
當構造過程必須允許被構造的對象有不同的表示時。
C#設計模式之行為類模式:模板方法模式