學(xué)習(xí)裝飾者模式(Decorator)
1、定義及作用
該模式以對客戶端透明的方式擴(kuò)展對象的功能。
2、涉及角色
抽象構(gòu)件角色:定義一個(gè)抽象接口,來規(guī)范準(zhǔn)備附加功能的類。
具體構(gòu)件角色:將要被附加功能的類,實(shí)現(xiàn)抽象構(gòu)件角色接口。
抽象裝飾者角色:持有對具體構(gòu)件角色的引用并定義與抽象構(gòu)件角色一致的接口。
具體裝飾角色:實(shí)現(xiàn)抽象裝飾者角色,負(fù)責(zé)為具體構(gòu)件添加額外功能。
3、簡單實(shí)現(xiàn)
抽象構(gòu)件角色java 代碼:












具體構(gòu)件角色:
















抽象裝飾者角色:
























具體裝飾者角色1:


























具體裝飾者角色2:






















測試類:























OO原則:動(dòng)態(tài)地將責(zé)任附加到對象上。想要擴(kuò)展功能,裝飾者提供有別于繼承的另一種選擇。
要點(diǎn):
1、繼承屬于擴(kuò)展形式之一,但不見得是達(dá)到彈性設(shè)計(jì)的最佳方案。
2、在我們的設(shè)計(jì)中,應(yīng)該允許行為可以被擴(kuò)展,而不須修改現(xiàn)有的代碼。
3、組合和委托可用于在運(yùn)行時(shí)動(dòng)態(tài)地加上新的行為。
4、除了繼承,裝飾者模式也可以讓我們擴(kuò)展行為。
5、裝飾者模式意味著一群裝飾者類,這些類用來包裝具體組件。
6、裝飾者類反映出被裝飾的組件類型(實(shí)際上,他們具有相同的類型,都經(jīng)過接口或繼承實(shí)現(xiàn))。
7、裝飾者可以在被裝飾者的行為前面與/或后面加上自己的行為,甚至將被裝飾者的行為整個(gè)取代掉,而達(dá)到特定的目的。
8、你可以有無所數(shù)個(gè)裝飾者包裝一個(gè)組件。
9、裝飾者一般對組建的客戶是透明的,除非客戶程序依賴于組件的具體類型。
10、裝飾者會導(dǎo)致設(shè)計(jì)中出現(xiàn)許多的小對象,如果過度使用,會讓程序變得很復(fù)雜。
posted on 2008-05-25 09:58 々上善若水々 閱讀(1260) 評論(0) 編輯 收藏 所屬分類: 設(shè)計(jì)模式