設計模式培訓之七:模版方法
查看本人文章索引請通過http://www.rzrgm.cn/seesea125/archive/2012/04/17/2453256.html
一、定義
定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。Template Method使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。
二、應用場景
Template Method模式非常簡單,但是在面向對象系統中有著大量的應用。比如我們先提供一個父類,然后先把固定不變的算法放在父類中實現,但是一些可變的行為就先不實現它,留給子類實現。這時候我們發布出去了,如果使用者需要擴展功能,則你可以繼承這個抽象類,然后覆寫里面的抽象方法或virturl方法,再然后就調用一個類似的execute方法(父類定義好的),就完成了擴展開發,所以這個模式有著大量的應用。
另外這個模式也是把各子類的公共行為提取到父類中,避免了代碼重復。
三、代碼實現
比如模仿動物的叫聲,我們先定義一個算法的骨架,一個Animal類,這個類里,我們有一個Shout的方法,但是這個方法又從GetShout方法來獲取值,GetShout方法要延遲要子類去實現。
class Animal { public string Shout() { return GetShout(); } protected virtual string GetShout() { return ""; } }
兩個子類的實現
//貓叫 class Cat:Animal { protected override string GetShout() { return "喵喵"; } } //狗叫 class Dog : Animal { protected override string GetShout() { return "汪汪"; } }
客戶端的調用
Animal animal=new Cat(); Console.WriteLine(animal.Shout()); animal = new Dog(); Console.WriteLine(animal.Shout());
四、總結
模版方法很簡單,但用途很廣,他允許我們先定義好算法骨架,然后讓具體實現由子類來實現,因此可以進行擴展開發。另外也是代碼復用的基本技術,如果代碼高度類似,可以考慮用模版方法去除重復。


浙公網安備 33010602011771號