裝飾者模式(Decorator Pattern),是在不必改變?cè)愇募褪褂美^承的情況下,動(dòng)態(tài)的擴(kuò)展一個(gè)對(duì)象的功能。它是通過(guò)創(chuàng)建一個(gè)包裝對(duì)象,也就是裝飾來(lái)包裹真實(shí)的對(duì)象。
使用裝飾者模式的時(shí)候需要注意一下幾點(diǎn)內(nèi)容:
(1)裝飾對(duì)象和真實(shí)對(duì)象有相同的接口。這樣客戶端對(duì)象就可以以和真實(shí)對(duì)象相同的方式和裝飾對(duì)象交互。
(2)裝飾對(duì)象包含一個(gè)真實(shí)對(duì)象的引用。
(3)裝飾對(duì)象接受所有的來(lái)自客戶端的請(qǐng)求,它把這些請(qǐng)求轉(zhuǎn)發(fā)給真實(shí)的對(duì)象。
(4)裝飾對(duì)象可以在轉(zhuǎn)發(fā)這些請(qǐng)求以前或以后增加一些附加功能。這樣就確保了在運(yùn)行時(shí),不用修改給定對(duì)象的結(jié)構(gòu)就可以在外部增加附加的功能。在面向?qū)ο蟮脑O(shè)計(jì)中,通常是通過(guò)繼承來(lái)實(shí)現(xiàn)對(duì)給定類的功能擴(kuò)展。然而,裝飾者模式,不需要子類可以在應(yīng)用程序運(yùn)行時(shí),動(dòng)態(tài)擴(kuò)展功能,更加方便、靈活。
適用裝飾者模式場(chǎng)合:
1.當(dāng)我們需要為某個(gè)現(xiàn)有的對(duì)象,動(dòng)態(tài)的增加一個(gè)新的功能或職責(zé)時(shí),可以考慮使用裝飾模式。
2.當(dāng)某個(gè)對(duì)象的職責(zé)經(jīng)常發(fā)生變化或者經(jīng)常需要?jiǎng)討B(tài)的增加職責(zé),避免為了適應(yīng)這樣的變化,而增加繼承子類擴(kuò)展的方式,因?yàn)檫@種方式會(huì)造成子類膨脹的速度過(guò)快,難以控制。
推薦你一本設(shè)計(jì)模式方面的優(yōu)秀書籍:鄭阿奇 主編的《軟件秘笈-設(shè)計(jì)模式那點(diǎn)事》。里面講解很到位,實(shí)例通俗易懂,看了收獲很大!