模板方法模式算法
1 適用狀況:c#
當咱們要完成在某一細節層次一致的一個過程或一系列步驟,但其個別步驟在更詳細的層次上的實現可能不一樣時,咱們一般考慮用模板方法模式來處理.設計模式
2 定義:ide
定義一個操做中的算法的骨架,而將一些步驟延遲到子類中.設計
模板方法使得子類能夠不改變一個算法的結構便可重定義該算法的某些特定步驟.
code
3 例子: (引用於《大話設計模式》)
繼承
1) AbstractClass是抽象類,定義實現了一個模板方法,這個模板方法通常是一個具體方法.這就是一個頂級邏輯的骨架,而邏輯的組成步驟則在相應的抽象操做中,推遲到子類實現.
string
abstract class AbstractClass { public abstract void PrimitiveOperation1(); public abstract void PrimitiveOperation2(); public void TemplateMethod() { PrimitiveOperation1(); PrimitiveOperation2(); Console.WriteLine(""); } }
2) ConcreteClass類繼承抽象類AbstractClass,不一樣的ConcreteClass能夠給出抽象方法的不一樣實現.
it
class ConcreteClassA:AbstractClass { public override void PrimitiveOperation1() { Console.WriteLine("具體類A方法1實現"); } public override void PrimitiveOperation2() { Console.WriteLine("具體類A方法2實現"); } } class ConcreteClassB : AbstractClass { public override void PrimitiveOperation1() { Console.WriteLine("具體類B方法1實現"); } public override void PrimitiveOperation2() { Console.WriteLine("具體類B方法2實現"); } }
3)客戶端調用以下:io
class Program { static void Main(string[] args) { AbstractClass c; c = new ConcreteClassA(); c.TemplateMethod(); c = new ConcreteClassB(); c.TemplateMethod(); Console.Read(); } }