第四個設計模式:裝飾模式
裝飾模式是對物件功能增強時,平時使用繼承的一種替代方案
一.uml示意圖:
二.組成部分:
1. 抽象構件:原始的功能介面
2. 具體構件:具體的原始功能類
3. 裝飾角色:持有具體構件類的物件,以便執行原有功能
4. 具體裝飾:具體擴充套件的功能在這裡
三.例子**:使用裝飾模式來演示乙個對」行走」功能擴充套件的例子(聽**+行走和唱歌+行走)
1. 抽象構件
packagecom.eekq.decorator;
public
inte***cecomponent
2. 具體構件
packagecom.eekq.decorator;
public
classconcretecomponentimplementscomponent }
3.裝飾角色來了
packagecom.eekq.decorator;
public
classdecoratorimplementscomponent
/**呼叫原始構件功能,通常就可直接把擴充套件功能加在此方法中*/
public
voidgo() }
4.具體裝飾(這裡演示了兩種擴充套件的情況,走路+聽**和唱歌s)
(1).
packagecom.eekq.decorator;
public
classconcretedecoratorlistenextendsdecorator
/**商業邏輯,對原始構件功能的擴充套件*/
public
voidgo()
private
voidlisten(object obj) }
(2).
packagecom.eekq.decorator;
public
classconcretedecoratorsingextendsdecorator
/**商業邏輯,對原始構件功能的擴充套件*/
public
voidgo()
privatestring sing() }
5.客戶端呼叫
packagecom.eekq.decorator;
public
classmain }
四.總結
優點:裝飾模式和繼承都是對功能的擴充套件,而裝飾模式使用的是組合,可以不用繼承而達到這一效果.使用過多的繼承會增加系統的複雜性和偶合性
缺點:裝飾模式要產生一些輔助性的物件,但這些物件看上去都比較像,不是很容易檢查(好的命名應該是提高檢查的乙個辦法)
java與模式 裝飾模式 decorator
裝飾模式以對客戶端透明的方式擴充套件物件的功能,是繼承關係的乙個替代方案。裝飾模式應該在以下情況下使用 需要擴充套件乙個類的功能,或給乙個類增加附加責任。需要動態地給乙個物件增加功能,這些功能可以再動態地撤銷。需要增加由一些基本功能的排列組合而產生的非常大量的功能,從而使繼承關係變的不現實。如圖 應...
《java與模式》 13 裝飾模式
裝飾模式也叫包裝模式 裝飾模式以對客戶透明的方式動態的給乙個物件附加上更多責任,客戶端不會覺得物件在裝飾前和裝飾後有什麼不同,裝飾模式可以在不使用建立跟多子類的情況下,將物件功能加以擴充套件 裝飾模式常常被稱作包裹模式,每乙個具體裝飾類都將下乙個具體裝飾類或具體構件類包起來,每一層包裹都提供了一些新...
Java 裝飾模式
動態地給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更加靈活。盜圖 component是定義了乙個物件介面,可以誒這些uixiang動態新增職責。concretecomponent是定義了乙個具體物件,也可以給這個物件新增一些職責,decorator,裝飾抽象類,繼承了compon...