乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      設(shè)計模式(14) 模板方法模式

       頭號碼甲 2021-07-14

      模板方法模式

      模板方法模式是面向?qū)ο笙到y(tǒng)中非常樸實的一種模式,體現(xiàn)出面向?qū)ο笤O(shè)計中繼承和多態(tài)的基本特征。在開發(fā)應(yīng)用的過程中,往往會在初期規(guī)劃一些較粗粒度的算法,而且對參與計算的對象進行抽象,明確算法會使用到哪些方法,每個方法可以提供哪些支持,但此時每個方法本身并沒有細化;隨著開發(fā)過程的展開,我們可能會具體實現(xiàn)每個方法,或者對最初的一些方法進行替換,覆蓋上新的內(nèi)容,這樣就在一個相對固定的算法框架下,通過子類(或其他方法)的變化,實現(xiàn)了算法的差異性。

      GOF對模板方法模式的描述為:
      Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template Method let ssubclasses redefine certain steps of an algorithm without changing the algorithm's structure..
      — Design Patterns : Elements of Reusable Object-Oriented Software

      UML類圖:
      模板方法模式 UML類圖

      代碼示例:

      public abstract class Template
      {
          public abstract void Init();
          public abstract void Start();
          public abstract void End();
      
          public void Process()
          {
              Init();
              Start();
              End();
          }
      }
      
      public class ConcreteProcessor1 : Template
      {
          public override void End()
          {
              Console.WriteLine("Process1 End");
          }
      
          public override void Init()
          {
              Console.WriteLine("Process1 Init");
          }
      
          public override void Start()
          {
              Console.WriteLine("Process1 Start");
          }
      }
      
      public class ConcreteProcessor2 : Template
      {
          public override void End()
          {
              Console.WriteLine("Process2 End");
          }
      
          public override void Init()
          {
              Console.WriteLine("Process2 Init");
          }
      
          public override void Start()
          {
              Console.WriteLine("Process2 Start");
          }        
      }
      

      適用場景

      • 在實現(xiàn)一個算法時,發(fā)現(xiàn)其中有些部分非常易變,或者很容易隨著運行環(huán)境、后續(xù)開發(fā)的不同產(chǎn)生而很多變化,此時就按照模板方法模式可以把它們抽象出來,供子類完成。
      • 在需要對一系列子類進行約束,要求它們必須實現(xiàn)算法要求的某些方法時,可以采用模板方法模式,便于其他客戶程序按照這些方法操作子類。

      優(yōu)點
      1、封裝不變部分,擴展可變部分。 2、提取公共代碼,便于維護。 3、行為由父類控制,子類實現(xiàn)。

      • 提高代碼復(fù)用性,將相同部分的代碼放在抽象的父類中 ,而將不同的代碼放入不同的子類中
      • 提高了擴展性,將不同的代碼放入不同的子類中,通過對子類的擴展增加新的行為
      • 實現(xiàn)了反向控制,通過一個父類調(diào)用其子類的操作,通過對子類的擴展增加新的行為,實現(xiàn)了反向控制,符合“開閉原則”

      缺點
      每一個不同的實現(xiàn)都需要一個子類來實現(xiàn),導(dǎo)致類的個數(shù)增加,使得系統(tǒng)更加龐大。

      參考書籍:
      王翔著 《設(shè)計模式——基于C#的工程化實現(xiàn)及擴展》

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多