設計模式 Decorator 裝飾模式

2022-09-04 07:00:20 字數 1002 閱讀 6936

形象例子:

mary過完輪到sarly過生日,還是不要叫她自己挑了,不然這個月伙食費肯定玩完,拿出我去年在華山頂上照的**,在背面寫上「最好的的禮物,就是愛你的fita」,再到街上禮品店買了個像框(賣禮品的mm也很漂亮哦),再找隔壁搞美術設計的mike設計了乙個漂亮的盒子裝起來……,我們都是decorator,最終都在修飾我這個人呀,怎麼樣,看懂了嗎?

裝飾模式:

裝飾模式以對客戶端透明的方式擴充套件物件的功能,是繼承關係的乙個替代方案,提供比繼承更多的靈活性。動態給乙個物件增加功能,這些功能可以再動態的撤消。增加由一些基本功能的排列組合而產生的非常大量的功能。

作用:動態地給乙個物件新增一些額外的職責。就增加功能來說,decorator 模式相比生成子類更為靈活。

uml結構圖:

抽象基類:

1)component:定義乙個物件介面,可以為這個介面動態的新增職責.

2)decorator:維持乙個指向component的指標,並且有乙個和component一致的介面函式.

介面函式:

1)component::operation:這個介面函式由component宣告,因此component的派生類都需要實現,可以在這個介面函式的基礎上給它動態新增職責.

解析:decorator

的派生類可以為concreatecomponent類的物件動態的新增職責,或者可以這麼說:decorator的派生類裝飾

concreatecomponent類的物件.具體是這麼實現的,首先初始化乙個concreatecomponent類的物件(被裝飾者),採用這個

物件去生成乙個decorator物件(裝飾者),之後對operation函式的呼叫則是對這個decorator物件成員函式的多型呼叫.這裡的實現

要點是decorator類和concreatecomponent類都繼承自component,從而兩者的介面函式是一致的;其

次,decorator維護了乙個指向component的指標,從而可以實現對component::operation函式的動態呼叫.

Decorator 裝飾 設計模式

宣告 本博文篇幅短,適合review。一 概念 裝飾模式是在不必改變原類檔案和使用繼承的情況下,動態地擴充套件乙個物件的功能。它是通過建立乙個包裝物件,也就是裝飾來包裹真實的物件。二 結構模式圖 三 例子 四 優缺點 1 優點 a decorator模式與繼承關係的目的都是要擴充套件物件的功能,但是...

設計模式 Decorator裝飾模式

decorator裝飾模式是一種結構型模式,它主要是解決 過度地使用了繼承來擴充套件物件的功能 由於繼承為型別引入的靜態特質,使得這種擴充套件方式缺乏靈活性 並且隨著子類的增多 擴充套件功能的增多 各種子類的組合 擴充套件功能的組合 會導致更多子類的膨脹 多繼承 繼承為型別引入的靜態特質的意思是說以...

設計模式 裝飾模式(Decorator )

讓我們來理解一下這句話。我們來設計 門 這個類。假設你根據需求為 門 類作了如下 定義 現在,在系統的乙個地方需要乙個能夠報警的door,你來怎麼做呢?你或許寫乙個door的子類alarmdoor,在裡面新增乙個子類獨有的方法alarm 嗯,那在使用警報門的地方你必須讓客戶知道使用的是警報門,不然無...