日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

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

 頭號碼甲 2021-07-14

模板方法模式

模板方法模式是面向?qū)ο笙到y(tǒng)中非常樸實的一種模式,體現(xiàn)出面向?qū)ο笤O(shè)計中繼承和多態(tài)的基本特征。在開發(fā)應(yīng)用的過程中,往往會在初期規(guī)劃一些較粗粒度的算法,而且對參與計算的對象進(jìn)行抽象,明確算法會使用到哪些方法,每個方法可以提供哪些支持,但此時每個方法本身并沒有細(xì)化;隨著開發(fā)過程的展開,我們可能會具體實現(xiàn)每個方法,或者對最初的一些方法進(jì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)生而很多變化,此時就按照模板方法模式可以把它們抽象出來,供子類完成。
  • 在需要對一系列子類進(jìn)行約束,要求它們必須實現(xiàn)算法要求的某些方法時,可以采用模板方法模式,便于其他客戶程序按照這些方法操作子類。

優(yōu)點
1、封裝不變部分,擴展可變部分。 2、提取公共代碼,便于維護(hù)。 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)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多