一、裝飾器模式的定義
? ??head first對裝飾器模式的說明: 動態(tài)的將責(zé)任附加到對象上。若要擴(kuò)展功能,裝飾者提供了比繼承更優(yōu)秀的方案。
? ??
二、使用裝飾器模式的目的
? ??
三、裝飾器模式符合了哪些設(shè)計原則
? ? 這里裝飾器滿足:里氏替換原則、迪米特原則、合成復(fù)用原則
? ? ?????個人感覺裝飾器對象(包裝了許多層),滿足了里氏替換原則,其被裝飾者繼承自裝飾抽象類,但未改變其功能,使得裝飾者將行為放心的委托給被裝飾者,由此可見,它也符合了迪米特原則的定義。而在要添加裝飾者種類的時候,只需要添加一個裝飾者類繼承自基類。當(dāng)然,裝飾者中包含了被裝飾者,當(dāng)然也滿足合成復(fù)用原則。有人可能會有疑惑,裝飾者不是繼承了統(tǒng)一的基類嗎,這里,事實上,裝飾器使用了繼承達(dá)到“類型匹配”,而不是利用繼承獲得“行為”。也就是說這個基類的作用相當(dāng)于是一個規(guī)范,統(tǒng)一了裝飾者的行為,但也因此限制了裝飾器的行為,若有一個裝飾器需要加入一個新的行為,那么,在調(diào)用的過程中會出現(xiàn)問題,也因此考慮是否要使用裝飾器了。
四、我對裝飾器模式的看法
? ? 小知識點(diǎn):使用了繼承,那么類的行為在編譯階段就被確定,而使用組合,使得在運(yùn)行階段,在不同對象發(fā)生組合的時候可以動態(tài)的改變,更具有靈活性。
? ? 總的來說,裝飾器就像一個禮物盒子一樣,可以一層包裝一層,假設(shè)有兩個行為,其一是送禮物,其二是了解禮物到底是怎么樣的(包裝+禮物本身,也可以是禮物本身,這里采用前者),可以發(fā)現(xiàn)禮物盒子和禮物都可以有這兩個行為。最里層也就是禮物本身,是最特殊的,他不能作為裝飾者來使用,因此,我們使得其直接繼承基類。但包裝盒子還有一個屬性,就是他能包含一個禮物(禮物本身或包裝好的禮物),因此實現(xiàn)一個繼承自基類的抽象類,那么不同包裝盒只要繼承自該類就可以了。最后,我們先創(chuàng)建禮物,然后使用包裝盒去包裝它。有趣的是,當(dāng)我們拆開幾層包裝后,發(fā)現(xiàn)還是一個包裝盒,但我們?nèi)匀豢梢詫⑵洚?dāng)作禮物送給其他人(包裝對象依舊具有送出禮物的行為)。不過這個禮物有一個問題----你只能一直包裝下去,而不能去拆開禮物,因為禮物本身沒有拆開禮物的行為。