裝飾者模式(Decorator Pattern),C#,Disgin Pattern 整理
1.基本觀念Code 請參考史帝芬心得筆記 -- Decorator Pattern (裝飾模式)
2.裝飾者模式的類別圖:
3.類別圖說明:
以餐點來說,比如去麥當勞叫一個進辣雞腿堡餐,那不變的就是主餐,其他附餐方面都可以替換。
接著用上面的類別圖來解釋對應的角色:
A.Component:為最基本的元件的共同規則,假設:不管麥當勞或者可樂 都需要付費、有大小可以選擇
B.ConcreteComponent:為被裝飾者的,比如勁辣雞腿堡餐(或是勁辣雞腿堡餐的雞腿堡,可自行設定) 他就是一個ConcreteComponent ,因為它可以在搭配上不同的東西
C.Decorator:每個裝飾品必須實現Decorator才能成為裝飾品,而Decorator必須實作Componen,每個裝飾品(ConcretDecorator)必須實現Decorator規則,而才能讓子物件裝飾於被裝飾者上。
假設:每個附餐的價位可能因為特價期間或是搭配方法造成金錢算法不同,所已必須重寫原本原規則或是建立新規則。
D.ConcretDecorator:裝飾品
4.實作小範例:
源碼加註解請於可於本頁下載。Decorator Pattern Sample.rar
A.系統需要新增新功能,但不想因為過多的子類別繼承造成系統快速膨脹。
B.類別需要「動態」附加新功能時。
6.模式特色:
A.Component無需知道Decorator的存在。
B.Decorator繼承Component,從外部擴展Component類別的功能。
A、B說明的好處:當我們在產生物件時可以不必先考量該物件是否被裝飾,當發現該物件需要裝飾時,再取出我們所需使用的共同規則(interface、abstract)及可 以裝飾者模式擴充。
C.將欲裝飾(動態增加)的功能放在單獨的類別中,並讓這個類別包裝他要裝飾的物件,
由於在這個模式下所有物件都「是一種」Component,所以可將這些裝飾功能加以動態組合串接。
C.說明的好處:可以使用反射的機制,來加強裝飾者模式的動態使用。
by-藍小伙
(若有錯誤或是更好的方法,煩請不吝指教,歡迎交流。 By-藍小伙)