裝飾者模式可以動(dòng)態(tài)地給一個(gè)對(duì)象添加一些額外的職責(zé)。就增加功能來(lái)說(shuō),Decorator模式相比生成子類(lèi)更為靈活。

該模式的適用環(huán)境為:

(1)在不影響其他對(duì)象的情況下,以動(dòng)態(tài)、透明的方式給單個(gè)對(duì)象添加職責(zé)。

(2)處理那些可以撤消的職責(zé)。

(3)當(dāng)不能采用生成子類(lèi)的方法進(jìn)行擴(kuò)充時(shí)。一種情況是,可能有大量獨(dú)立的擴(kuò)展,為支持每一種組合將產(chǎn)生大量的子類(lèi),使得子類(lèi)數(shù)目呈爆炸性增長(zhǎng)。另一種情況可能是因?yàn)轭?lèi)定義被隱藏,或類(lèi)定義不能用于生成子類(lèi)。

實(shí)現(xiàn)該模式的關(guān)鍵步驟:

(1)Component(被裝飾對(duì)象基類(lèi)):定義對(duì)象的接口,可以給這些對(duì)象動(dòng)態(tài)增加職責(zé);

(2)ConcreteComponent(具體被裝飾對(duì)象):定義具體的對(duì)象,Decorator可以給它增加額外的職責(zé);

(3)Decorator(裝飾者抽象類(lèi)):維護(hù)指向Component實(shí)例的引用,定義與Component一致的接口(也就是要繼承或?qū)崿F(xiàn)被裝飾對(duì)象基類(lèi));

(4)ConcreteDecorator(具體裝飾者):具體的裝飾對(duì)象,給內(nèi)部持有的具體被裝飾對(duì)象增加具體的職責(zé);

這樣講大家可能有些不好理解,那我們還是老規(guī)矩iOS培訓(xùn),Swift培訓(xùn),蘋(píng)果開(kāi)發(fā)培訓(xùn),移動(dòng)開(kāi)發(fā)培訓(xùn)

入冬以后天氣越來(lái)越冷了,下班之后,做為資深吃貨,約上二三好友痛快的來(lái)場(chǎng)火鍋盛宴再爽不過(guò)了。說(shuō)到火鍋,不得不提在成都吃過(guò)的大龍燚火鍋,各種鍋底,配菜應(yīng)有盡有,但我最喜歡的還是大龍燚火鍋原味鍋底、麻辣牛肉、大刀毛肚、天味香腸、砣砣牛肉、麻辣排骨等,想想都流口水啊。

網(wǎng)友評(píng)論