我們的目標(biāo)是允許類容易擴(kuò)展港准,在不修改現(xiàn)有代碼的情況下旨剥,就可搭配新的行為。如果能實(shí)現(xiàn)這樣的目標(biāo)浅缸,有什么好處呢泞边?這樣的設(shè)計(jì)具有彈性,可以應(yīng)對(duì)改變疗杉,可以接受新的功能來(lái)應(yīng)對(duì)改變的需求阵谚。
這就是我們要講的--裝飾者模式。
概念
動(dòng)態(tài)地將責(zé)任附加到對(duì)象上烟具。若要擴(kuò)展功能梢什,裝飾著提供了比繼承更有彈性的替代方案。
設(shè)計(jì)原則
- 對(duì)擴(kuò)展開(kāi)放朝聋,對(duì)修改關(guān)閉嗡午。
要點(diǎn)
- 繼承屬于擴(kuò)展模式之一,但不見(jiàn)得是達(dá)到彈性設(shè)計(jì)的最佳方式冀痕。
- 在我們的設(shè)計(jì)中荔睹,應(yīng)該允許行為可以被擴(kuò)展,而無(wú)需修改現(xiàn)有的代碼言蛇。
- 組合和委托可用于在運(yùn)行時(shí)動(dòng)態(tài)地加上新的行為僻他。
- 除了繼承,裝飾者模式也可以讓我們擴(kuò)展行為腊尚。
- 裝飾者模式意味著一群裝飾者類吨拗,這些類用來(lái)包裝具體組件。
- 裝飾者類反映出被裝飾的組件類型(事實(shí)上,它們具有相同的類型劝篷,都經(jīng)過(guò)接口或繼承實(shí)現(xiàn))哨鸭。
- 裝飾者可以在被修飾者的行為前面與/或后面加上自己的行為,甚至將裝飾者的行為整個(gè)取代掉娇妓,而達(dá)到特定的目的像鸡。
- 你可以用無(wú)數(shù)個(gè)裝飾者包裝一個(gè)組件。
- 裝飾者一般對(duì)組件的客戶是透明的哈恰,除非客戶程序依賴于組件的具體類型只估。
- 裝飾者會(huì)導(dǎo)致設(shè)計(jì)中出現(xiàn)許多小對(duì)象,如果過(guò)度使用蕊蝗,會(huì)讓程序變得很復(fù)雜仅乓。