java與模式 裝飾模式

2021-06-05 09:03:23 字數 1850 閱讀 7125

第四個設計模式:裝飾模式

裝飾模式是對物件功能增強時,平時使用繼承的一種替代方案

一.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...