裝飾模式定義:動態地給乙個物件增加一些額外的職責,就增加物件功能來看,裝飾模式比生成子類實現更為靈活。可以看出,裝飾模式是一種物件結構型模式。
裝飾模式角色說明:(4個角色)
(1):component(抽象構件類):具體構件和抽象裝飾類的共同父類,宣告了在具體構件中實現的業務方法,它的引入可以使客服端以一致的方式處理未被處理的物件以及裝飾之後的物件,實現了客服端的透明操作。
(2):concretecomponent(具體構件類):抽象構件類的子類,用於定義具體的構件物件,實現了在抽象構件中宣告的方法,裝飾器可以給它增加了額外的方法。
(3):decorator(抽象裝飾類):它也是抽象構件類的子類,用於給具體構件增加職責,但是具體職責在其子類中實現的,它維護了乙個指向抽象構建類物件的引用,通過該引用可以呼叫裝飾之前構件物件的方法,並通過其子類來擴充套件該方法,來達到裝飾的目的。
(4):concretedecorator(具體裝飾類):它是抽象裝飾類的子類,負責向構件類中新增新的的職責,每乙個具體的裝飾類都定義了一些新的行為,可以呼叫在抽象裝飾類中定義的方法,並可以增加新的方法用以擴充套件物件的行為。
裝飾模式有透明裝飾模式和半透明裝飾模式二種。
(1):透明裝飾模式
在透明裝飾模式中,是要求客戶端完全針對抽象程式設計,裝飾模式的透明性要求客戶端程式不應該將物件宣告為具體構件型別或具體裝飾型別,而應該全部宣告為抽象構件型別,對於客戶端來說,具體構件物件和具體裝飾物件沒有什麼區別。
(2):半透明裝飾模式
為了能夠呼叫到新增方法,不得不用具體裝飾型別來定義裝飾之後的物件,而具體構件型別還是可以使用抽象構件型別來定義的,這種裝飾模式就是半透明的裝飾模式。
使用裝飾模式需要注意下面幾點:
(1):盡量保持裝飾類的介面與被裝飾的介面相同,這樣,對於客戶端來說,無論是裝飾之前的物件還是裝飾之後的物件都可以一致對待。
(2):盡量保持具體構件類是乙個"輕"類,也就是說不要把太多的行為放在具體構建類中,可以通過裝飾類對其進行擴充套件。
(3):如果只有乙個具體構建類,那麼抽象裝飾類可以作為該具體構件類的直接子類。
設計模式 裝飾模式
裝飾模式,動態地給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。m 超級瑪麗 普通繼承模式實現 a 發鏢 能組合出七種功能 m1 a m4 a b b 變身 m2 b m5 a c c 無敵 m3 c m6 b c m7 a b m m1 a b 組合方法 new m2 m...
設計模式 裝飾模式
剛看了看設計模式,真是費了好多的腦細胞。想著想著就到了食堂。o o哈!正是長身體的時候 大神勿噴 一定要多吃點。於是我打了乙份公尺飯,然後又端著盛公尺飯的盤子買了乙份菜 看著還不是很夠,就又端著這個盤子買了一條最愛吃的魚。裝飾模式!五一要來了。回家轉轉,沒有小外甥的玩具怎麼行。於是我去超市,推著購物...
設計模式 裝飾模式
複習設計模式 裝飾模式 裝飾模式 在不修改已經存在的類的情況下,動態的新增新的功能,實現即插即用,開放關閉原則 public inte ce man public class batman implements man override public void killmonster public ...