Decorator(装饰)--对象结构型模式
Decorator(裝飾)–對(duì)象結(jié)構(gòu)型模式
一、意圖
1.動(dòng)態(tài)地給一個(gè)對(duì)象添加一些額外的職責(zé)。就增加功能來說,Decorator模式相比生成子類更為靈活。
二、動(dòng)機(jī)
1.在某些情況下我們可能會(huì)“過度地使用繼承來擴(kuò)展對(duì)象的功能”, 由于繼承為類型引入的靜態(tài)特質(zhì),使得這種擴(kuò)展方式缺乏靈活性; 并且隨著子類的增多(擴(kuò)展功能的增多),各種子類的組合(擴(kuò)展功能的組合)會(huì)導(dǎo)致更多子類的膨脹。
2.如何使“對(duì)象功能的擴(kuò)展”能夠根據(jù)需要來動(dòng)態(tài)地實(shí)現(xiàn)?同時(shí)避免“擴(kuò)展功能的增多”帶來的子類膨脹問題?從而使得任何“功能 擴(kuò)展變化”所導(dǎo)致的影響將為最低?
三、適用性
1.在不影響其他對(duì)象的情況下,以動(dòng)態(tài)、透明的方式給單個(gè)對(duì)象添加職責(zé)。
2.處理那些可以撤銷的職責(zé)。
3.打給你不能采用生成子類的方式進(jìn)行擴(kuò)充時(shí)。一種情況是,可能有大量獨(dú)立的擴(kuò)展,為支持每一種組合將產(chǎn)生大量的子類,使得子類數(shù)目呈爆炸性增長(zhǎng)。另一種情況可能是因?yàn)轭惗x被隱藏,或類定義不能用于生成子類。
四、結(jié)構(gòu)
五、效果
1.比靜態(tài)繼承更靈活。
2.避免在層次結(jié)構(gòu)高層的類有太多的特征。
3.Decorator與Component不一樣。
4.有許多小對(duì)象。
六、實(shí)現(xiàn)
1.接口的一致性。
2.省略抽象的Decorator類。
3.保持Component類的簡(jiǎn)單性
4.改變對(duì)象外殼(Decorator)與改變對(duì)象內(nèi)核(Strategy)
七、要點(diǎn)總結(jié)
1.通過采用組合而非繼承的手法,Decorator模式實(shí)現(xiàn)了在運(yùn)行時(shí)動(dòng)態(tài)擴(kuò)展對(duì)象功能的能力,而且可以根據(jù)需要擴(kuò)展多個(gè)功能。避免了使用繼承帶來的“靈活性差”和“多子類衍生問題”。
2.Decorator類在接口上表現(xiàn)為is-a Component的繼承關(guān)系,即 Decorator類繼承了Component類所具有的接口。但在實(shí)現(xiàn)上又 表現(xiàn)為has-a Component的組合關(guān)系,即Decorator類又使用了另外一個(gè)Component類。
3.Decorator模式的目的并非解決“多子類衍生的多繼承”問題,Decorator模式應(yīng)用的要點(diǎn)在于解決“主體類在多個(gè)方向上的擴(kuò)展功能”——是為“裝飾”的含義。
八、相關(guān)模式
Adapter模式:Decorator模式不同于Adapter模式,因?yàn)檠b飾僅改變對(duì)象的職責(zé)而不該變它的接口;而適配器將給對(duì)象一個(gè)全新的接口。
Component模式:可以將裝飾視為一個(gè)退化的、僅有一個(gè)組件的組合。然而,裝飾僅給對(duì)象添加一些額外的職責(zé)——它的目的不在于對(duì)象聚集。
Strategy模式:用一個(gè)裝飾你可以改變對(duì)象的外表;而Strategy模式使得不可以改變對(duì)象的內(nèi)核。這是改變對(duì)象的兩種途徑。
九、舉例說明
裝飾模式功能名字很能解釋它的行為,比如給手機(jī)貼膜,也可以給手機(jī)加個(gè)外殼,也可以隨時(shí)換模,添加和減少功能很方便等等。
本文為李建忠設(shè)計(jì)模式視頻的筆記以及《設(shè)計(jì)模式-可復(fù)用面向?qū)ο蟮能浖幕A(chǔ)》和自己的部分見解
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的Decorator(装饰)--对象结构型模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Composite(组合)--对象结构型
- 下一篇: 怎样瘦大腿和小腿