程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 設計模式之模板方法模式

設計模式之模板方法模式

編輯:C#入門知識

我們知道中國是一個“制造大國”而非一個“創造大國”,為什麼這麼說呢?因為我們中國人的智慧是無與倫比的,我們對於“模仿”來說有著與生俱來的天賦,但是從“創新”的角度來看還是舉步維艱。這次來談談國人的智慧-“模仿”。     說起“模仿”不得不提“模板”,因為有一個“模板”才能模仿出自己需要的東西。話說,當年的國產山寨機可是風靡一時,那麼就以制造手機來理解一下“模板方法模式”。     代碼結構圖:      \   在這裡Telephone是抽象類,其實也就是一個抽象模板,定義並實現了一個模板方法call()。這個模板方法是一個具體的方法,給出了一個頂級邏輯的骨架,而邏輯的組成步驟在相應的抽象操作中,推遲到子類實現。   模板代碼:     [csharp]  <SPAN style="FONT-SIZE: 18px">//手機      public abstract  class Telephone       {         //能夠撥打電話            public abstract void dial() ;            //實現通話功能            public abstract void communicate();            //掛斷電話            public abstract void hangup();            //匯總一下,才叫做通話-骨架            public void call()           {               //先撥號                this.dial();               //接聽後可以通話                this.communicate();               //通話完畢,掛斷                this.hangup();                  Console.WriteLine("");           }       }</SPAN>     //手機   public abstract  class Telephone     {       //能夠撥打電話         public abstract void dial() ;         //實現通話功能         public abstract void communicate();         //掛斷電話         public abstract void hangup();         //匯總一下,才叫做通話-骨架         public void call()         {             //先撥號             this.dial();             //接聽後可以通話             this.communicate();             //通話完畢,掛斷             this.hangup();               Console.WriteLine("");         }     }Nokia代碼:      [csharp] <SPAN style="FONT-SIZE: 18px">//山寨計劃-Nokia      class Nokia : Telephone     {         public override void dial()         {             //Nokia獨特的聲響              Console.WriteLine("鈴鈴鈴,Nokia用戶撥打中...");          }               public override void communicate()         {             Console.WriteLine("告訴你個好消息,我用上Nokia了");         }               public override void hangup()         {             Console.WriteLine("滴..滴.");         }     }</SPAN>     //山寨計劃-Nokia   class Nokia : Telephone   {       public override void dial()       {           //Nokia獨特的聲響           Console.WriteLine("鈴鈴鈴,Nokia用戶撥打中...");        }           public override void communicate()       {           Console.WriteLine("告訴你個好消息,我用上Nokia了");       }           public override void hangup()       {           Console.WriteLine("滴..滴.");       }   }Iphone代碼:      [csharp]  <SPAN style="FONT-SIZE: 18px">//山寨計劃-Iphone      class Iphone : Telephone     {         public override void dial()         {             //Nokia獨特的聲響              Console.WriteLine("啦啦啦,Iphone撥打中...");         }            public override void communicate()         {             Console.WriteLine("小李呀,我買蘋果了,羨慕吧...");         }            public override void hangup()         {             Console.WriteLine("咚..咚..");         }     }</SPAN>     //山寨計劃-Iphone   class Iphone : Telephone   {       public override void dial()       {           //Nokia獨特的聲響           Console.WriteLine("啦啦啦,Iphone撥打中...");       }         public override void communicate()       {           Console.WriteLine("小李呀,我買蘋果了,羨慕吧...");       }         public override void hangup()       {           Console.WriteLine("咚..咚..");       }   }客戶端代碼: [csharp]  <SPAN style="FONT-SIZE: 18px"> //客戶端client            static void Main(string[] args)           {                  //使用nokia                Telephone nokia1 = new Nokia();               nokia1.call();                  //使用Iphone                Telephone iphone= new Iphone();               iphone.call();                  Console.Read();           }</SPAN>      //客戶端client         static void Main(string[] args)         {                //使用nokia             Telephone nokia1 = new Nokia();             nokia1.call();               //使用Iphone             Telephone iphone= new Iphone();             iphone.call();               Console.Read();         }客戶端中將變量聲明改為父類,利用了多態性,實現了代碼的復用。    啟動後: \   這樣一款山寨的nokia和iphone就誕生了...           通過這個簡單的小例子是否對模板方法模式有了初步的了解。那麼模板模式有什麼特點呢:   1.當我們要完成在某一細節層次一致的一個過程或一系列步驟,但其個別步驟在更詳細的層次上的實現可能不同時,我們通常考慮用模板方法模式來處理;   2.模板方法模式是通過把不變行為搬移到超類,去除子類中的重復代碼來體現它的優勢;   3.模板方法提供了一個很好的代碼復用平台;   4.當不變和可變的行為在方法的子類實現中混合在一起的時候,不變的行為就會在子類中重復出現,我們通過模板方法模式把這些行為搬移到單一的地方,這樣就幫助子類擺脫重復的不變行為的糾纏。  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved