咱們學習瞭解完了建立型設計模式和結構型設計模式,今天咱們開始學習並瞭解行爲型設計模式。今天咱們首先來看這麼一個設計模式——模板方法模式。這個模式咱們在日常開發中總會不自覺的使用到。就像咱們平時同樣的各類網站模板、創建模板、PPT模板等等。啥意思呢?簡單,也就是把共同的東西拿出來,你須要具體去實現你本身的那麼就另外加上本身的特有行爲就是了。咱們一塊兒來看看詳細的解釋介紹吧。html
在咱們平時的系統開發中,常常會遇到一些方法,出現大部分同樣的代碼。也就是經常有一些穩定的框架結構,可是其中的一些細小的操做倒是在變化。咱們如今如何在穩定框架結構的前提下去實現不一樣的細節呢?算法
定義一個操做中的算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類能夠不改變一個算法的結構便可重定義該算法的某些特定步驟。設計模式
看上面的案例圖,看出模板方法模式由兩個部分組成:併發
抽象類:定義了一個模板方法,其中包含執行的步驟。還有固定方法和抽象方法框架
具體類:實現抽象方法具體行爲編輯器
咱們來看看下面這個代碼示例,幫助咱們更進一步瞭解其實現。 就拿咱們寫文章來講,步驟都是打開編輯器——寫文章——保存發佈。不一樣的就是咱們寫的文章的主題內容不同罷了。咱們一塊兒看起代碼實現:ide
namespace Template_Method_Pattern { class TemplateMethodPattern { } #region /// <summary> /// 抽象類型 /// </summary> public abstract class WriteArticle { /// <summary> /// 這個就是模板方法,定義了寫文章的順序。這裏不能使用抽象和Virtual,防止其子類修改執行順序。 /// </summary> public void Article() { OpenEditor(); Write(); Release(); Console.WriteLine("文章完成了併發布了!"); } /// <summary> /// 打開編輯器 /// </summary> public void OpenEditor() { Console.WriteLine("打開編輯器"); } /// <summary> /// 開始寫文章,其子類具體實現文章內容 /// </summary> public abstract void Write(); /// <summary> /// 發佈文章 /// </summary> public void Release() { Console.WriteLine("發佈文章"); } } #endregion /// <summary> /// 技術文章 /// </summary> public class TchnologyArticle : WriteArticle { public override void Write() { Console.WriteLine("設計模式相關的文章"); } } /// <summary> /// 生活文章 /// </summary> public class LifeArticle : WriteArticle { public override void Write() { Console.WriteLine("生活文章"); } } }
class Program { static void Main(string[] args) { //技術文章 WriteArticle writeTchnology = new TchnologyArticle(); writeTchnology.Article(); //生活文章 WriteArticle writeLife = new LifeArticle(); writeLife.Article(); } }
一、許多的子類都包含相同的方法,邏輯共通學習
二、重要複雜的方法能夠考慮做爲模板方法網站
一、共用部分方法實現代碼複用、編譯維護spa
二、固定父類順序,擴展子類實現。靈活變化、符合開閉原則
三、行爲由父類控制、實現子類控制
一、沒實現一個不一樣的需求就會增長一個子類,這樣會致使類的個數增長,增長系統的大小
二、須要開發人員花費更多的時間去整理和清理其中的關係
到這裏模板方法模式就介紹完了。總的來講就是模板方法模式定義了功能的實現步驟,而後抽象類對步驟進行控制,須要擴展的延遲到其子類進行擴展。從而子類能夠複用父類的代碼。固然這也仍是基於繼承來實現代碼複用的一種方法。在咱們開發的時候有一些系統定義的東西不符合咱們的需求。他們在開發中也是固定好了必定的骨架,其中一些方法留了出來,方便咱們開發人員本身從新定義。這麼一個模板方法模式在咱們平常開發中可能常常用到。有時候本身都不知覺的就使用到了。這也是一個較爲簡單且基礎的模式。
平凡人生要用平凡的心去對待,你的人生將會更精彩。
歡迎你們掃描下方二維碼,和我一塊兒踏上設計模式的闖關之路吧!