結(jié)構(gòu)型設(shè)計(jì)模式.裝飾器模式

<裝飾模式是繼承的一個(gè)替代模式>

概念理解

  • 定義:在不改變原有類的結(jié)構(gòu)基礎(chǔ)上,動態(tài)地給一個(gè)對象添加一些額外的職責(zé)。就增加功能來說,裝飾器模式相比生成子類更為靈活。

    Decorator.png

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

應(yīng)用和優(yōu)缺點(diǎn)

  • 解決問題:
    避免子類膨脹:擴(kuò)展一個(gè)類經(jīng)常使用繼承方式實(shí)現(xiàn),由于繼承為類引入靜態(tài)特征,并且隨著擴(kuò)展功能的增多,子類會很膨脹。

  • 應(yīng)用實(shí)例:
    1、裝飾模式為已有類動態(tài)附加額外的功能就像LOL、王者榮耀等類Dota游戲中,英雄升級一樣。每次英雄升級都會附加一個(gè)額外技能點(diǎn)學(xué)習(xí)技能。具體的英雄就是ConcreteComponent,技能欄就是裝飾器Decorator,每個(gè)技能就是ConcreteDecorator;

  • 應(yīng)用場景:
    1、擴(kuò)展一個(gè)類的功能。
    2、動態(tài)增加功能,動態(tài)撤銷。

  • 優(yōu)點(diǎn):
    1、裝飾者模式可以提供比繼承更多的靈活性
    2、裝飾類和被裝飾類可以獨(dú)立發(fā)展,不會相互耦合
    3、替代繼承的強(qiáng)耦合關(guān)系,模塊解耦

  • 缺點(diǎn):
    1、會產(chǎn)生很多的小對象,增加了系統(tǒng)的復(fù)雜性
    2、多層裝飾復(fù)雜度增加,意味著更加易于出錯(cuò),排錯(cuò)也很困難,調(diào)試時(shí)尋找錯(cuò)誤可能需要逐級排查,較為煩瑣。

參考:
裝飾器模式(Decorator)

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

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

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