模版方法模式:定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。模版方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。
AbstractClass是抽象類,其實也就是一抽象類,定義並實現了一個模版方法,這個模版方法一般是一個具體方法,它給出了一個頂級邏輯的骨架,而邏輯的組成步驟在相應的抽象操作中,推遲到子類實現。頂級邏輯也有可能調用一些具體方法。
ConcreteClassA,實現父類所定義的一個或多個抽象方法。每一個AbstractClass都可以有任意多個ConcreteClass與之對應,而每一個ConcreteClass都可以給出這些抽象方法(也就是頂級邏輯的組成步驟)的不同實現,從而使得頂級邏輯的實現各不相同。
public class ConCreteClassA : AbstractClass { public override void PrimitiveOperation1() { Console.WriteLine("具體類A方法1實現"); } public override void PrimitiveOperation2() { Console.WriteLine("具體類A方法2實現"); } } public class ConCreteClassB: AbstractClass { public override void PrimitiveOperation1() { Console.WriteLine("具體類B方法1實現"); } public override void PrimitiveOperation2() { Console.WriteLine("具體類B方法2實現"); } }
class Program { static void Main(string[] args) { AbstractClass Test; Test = new ConCreteClassA(); Test.TemplateMethod(); Test = new ConCreteClassB(); Test.TemplateMethod(); Console.ReadLine(); } }
運行結果如下
當不變的和可變的行為在方法的子類實現中混合在一起的時候,不變的行為就會在子類中重復出現。我們通過模版方法模式把這些行為搬移到單一的地方,這些幫助子類擺脫重復的不變行為的糾纏。