結構型設計模式.裝飾器模式

<裝飾模式是繼承的一個替代模式>

概念理解

  • 定義:在不改變原有類的結構基礎上,動態地給一個對象添加一些額外的職責。就增加功能來說,裝飾器模式相比生成子類更為靈活。

    Decorator.png

Component:原始組件的抽象類或者接口
ConcreteComponent:原始的組件對象,通常是被裝飾器裝飾的原始對象;
Decorator:裝飾器的抽象類或者接口。為了實現裝飾器功能的復用,需要繼承組件接口類Component;并持有一個Component對象。(如果不繼承組件接口類Component,則只能為某個組件添加單一的功能,即裝飾器對象不能在裝飾其他的裝飾器對象。)
ConcreteDecorator:具體的裝飾器類,實現向被裝飾對象添加的不同的功能。

應用和優缺點

  • 解決問題:
    避免子類膨脹:擴展一個類經常使用繼承方式實現,由于繼承為類引入靜態特征,并且隨著擴展功能的增多,子類會很膨脹。

  • 應用實例:
    1、裝飾模式為已有類動態附加額外的功能就像LOL、王者榮耀等類Dota游戲中,英雄升級一樣。每次英雄升級都會附加一個額外技能點學習技能。具體的英雄就是ConcreteComponent,技能欄就是裝飾器Decorator,每個技能就是ConcreteDecorator;

  • 應用場景:
    1、擴展一個類的功能。
    2、動態增加功能,動態撤銷。

  • 優點:
    1、裝飾者模式可以提供比繼承更多的靈活性
    2、裝飾類和被裝飾類可以獨立發展,不會相互耦合
    3、替代繼承的強耦合關系,模塊解耦

  • 缺點:
    1、會產生很多的小對象,增加了系統的復雜性
    2、多層裝飾復雜度增加,意味著更加易于出錯,排錯也很困難,調試時尋找錯誤可能需要逐級排查,較為煩瑣。

參考:
裝飾器模式(Decorator)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容