2019-05-11《設計模式之裝飾模式》

尊重時間 時間才會尊重你。

「1」說明

此乃《設計模式》之裝飾模式

「2」裝飾模式定義

動態(tài)地給一個對象添加一些額外的指責,就增加功能來說,裝飾模式比生成子類更為靈活。

「3」裝飾(Decotator)模式結構圖

  • Conponent:定義一個對象接口,可以給這些對象動態(tài)地添加職責。
  • ConcreteComponent:定義一個具體的對象,也可以給這個對象添加一些職責。
  • Decorator:裝飾抽象類,繼承了Component,從外類來擴展Component類的功能,但是對于Component來說,是無需知道Decorator的存在的。
  • ConreteDecorator:具體的裝飾對象,給Component添加功能。

「4」什么時候使用裝飾及模式和它好處

  • 裝飾模式是為已有功能動態(tài)地添加更多功能的一種方式。當系統(tǒng)需要新功能的時候,是向舊的類中添加新的代碼。這些新加的代碼通常裝飾了原有類的核心職責和主要行為。它們在主類中加入了新的字段,新的方法和新的邏輯,從而增加了主類的復雜度,而這些新加入的東西僅僅是為了滿足一些只在特定情況下才會執(zhí)行的特殊行為的需要。而裝飾模式卻提供了一個非常好的解決方案,它把每個要裝飾的功能放在單獨的類中,并讓這個類包裝它所要裝飾的對象,因此,當需要執(zhí)行特殊行為時,客戶代碼就可以在運行時根據(jù)需要有選擇地、按順序地使用裝飾功能包裝對象了。
  • 優(yōu)點就是把類中的裝飾功能從類中搬移去除,有效地把類中的核心職責和裝飾功能區(qū)分開,這樣可以簡化相關類中重復的裝飾邏輯。

「5」裝飾模式基本代碼推演

  • Component類
abstract class Component
{
    public abstract void Operation();
}
  • ConcreteComponent類
class ConcreteComponent : Component
{
    public override void Operation()
{
    Console.WriteLine("具體對象的操作");
}
}
  • Decorator類
abstract class Decorator : Component
{
      protected Component component;
      public void SetComponent(Component conponent)
    {
          this.component = component;
    }
     
    public override void Operation()
    {
      if(component != NULL)
    {
         component.Operation();
    }
    }      
}

ConcreteDecorator類

class ConcreteDecoratorA : Decorator
{
    private string addedState;
    public override void Operation()
     {
        base.Opetation();
        addedState = "New State";
       Console.WriteLine("具體裝飾對象A的操作");
     }
}

class ConcreteDecoratorB : Decorator
{
    public override void Operation()
     {
        base.Opetation();
        AddedBehavior;
       Console.WriteLine("具體裝飾對B的操作");
     }
     private void AddedBehavior()
    {
    }
}
  • 客戶端代碼
static void Main()
{
      ConcreteComponent c = new ConcreteComponent();
      ConcreteDecoratorA d1 = new ConcreteDecoratorA;
      ConcreteDecoratorB d2 = new ConcreteDecoratorB;
      d1.SetComponent(c);
      d2.SetComponent(d1);
      Console.Read();
}

「6」裝飾模式總結

裝飾模式把類中的裝飾功能從類中搬移去除,有效地把類中的核心職責和裝飾功能區(qū)分開,這樣可以簡化相關類中重復的裝飾邏輯。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 【學習難度:★★★☆☆,使用頻率:★★★☆☆】直接出處:裝飾模式梳理和學習:https://github.com/...
    BruceOuyang閱讀 837評論 2 2
  • 1 場景問題# 1.1 復雜的獎金計算## 考慮這樣一個實際應用:就是如何實現(xiàn)靈活的獎金計算。 獎金計算是相對復雜...
    七寸知架構閱讀 4,294評論 4 67
  • 概念:標準的裝飾模式有包括一個抽象的Component父類,它聲明了一些操作,它具體的類講進行重載以實現(xiàn)自己特定的...
    平頭僧閱讀 361評論 0 0
  • 設計模式(Design pattern)是一套被反復使用、多數(shù)人知曉的、經(jīng)過分類編目的、代碼設計經(jīng)驗的總結。使用設...
    于先笙閱讀 583評論 1 3
  • 9:00——12:00 日本班 堀江老師 【活動】北大青年“國是論壇”:教育質(zhì)量與教育公平 論壇主題:教育質(zhì)量與教...
    dq920813閱讀 124評論 0 0

友情鏈接更多精彩內(nèi)容