裝飾模式 Decorator

2021-07-03 15:24:24 字數 2874 閱讀 3755

裝飾模式

(decorator)

1. 裝飾模式

(decorator)

的定義:又名包裝

模式,裝飾模式以對客戶端透明的方式擴充套件物件的功能,是繼承關係的乙個替代方案。 2.

裝飾模式以對客戶端透明的方式動態的給乙個物件附加上更多的責任。換言之客戶端並不會覺的物件在裝飾前和裝飾後有什麼區別。 3.

裝飾模式可以在不創造更多的子類的模式下,將物件的功能加以擴充套件。 4.

裝飾模式與類繼承的區別: 1)

裝飾模式是一種動態行為,對已經存在類進行隨意組合,而類的繼承是一種靜態的行為,乙個類定義成什麼樣的,該類的物件便具有什麼樣的功能,無法動態的改變。 2)

裝飾模式擴充套件的是物件的功能,不需要增加類的數量,而類繼承擴充套件是類的功能,在繼承的關係中,如果我們想增加乙個物件的功能,我們只能通過繼承關係,在子類中增加兩個方法。 4)

裝飾模式是在不改變原類檔案和使用繼承的情況下,動態的擴充套件乙個物件的功能,它是通過建立乙個包裝物件,也就是裝飾來包裹真是的物件。 5.

裝飾模式把對客戶端的呼叫委派給被裝飾的類,裝飾模式的關鍵在於這種擴充套件完全透明的。 6.

裝飾模式的構成:

1) 抽象構建角色

(component):

給出乙個抽象的介面,以規範準備接受附加責任的物件。相當於

i/o流裡面

inputstream/outputstream

和reader/writer。

2) 具體的構建角色

(concretecomponent)

:定義乙個將要接受附加責任的類。相當於

i/o裡面的

fileoutputstream

和fileinputstream。

3) 裝飾角色

(docorator):

持有乙個抽象構建

(component)

角色的引用,並定義乙個與抽象構件一致的介面。相當於

i/o裡面的

fileroutputstream

和filterinputstream。

4) 具體的裝飾角色

(concretedecorator):

負責給構建物件「貼上」附加的責任。相當於

i/o流裡面的

bufferedoutputstream

和bufferedinputstream

以及dataoutputstream

和datainputsrtream。

7. 裝飾模式的特點: 1)

裝飾物件和真實物件具有相同的介面,這樣客戶端物件就可以以真實物件的相同的方式和裝飾物件互動。 2)

裝飾物件包含乙個真實物件的引用

(reference). 3)

裝飾物件接受所有來自客戶端的請求,它把這些請求**給真實的物件。 4)

裝飾物件可以在**這些請求以前或者以後增加一些附加的功能。這樣就能確保在執行時,不用修改給定物件結構就可以在外部增加附加的功能。在物件導向的程式設計中,通常是使用繼承的關係來擴充套件給定類的功能。 8.

案例: 1)

抽象的構建介面:

packagecom.abao.decorate;

public

inte***cecomponent

2) 具體的構建角色:

packagecom.abao.decorate;

public

classconcretecomponentimplementscomponent

} 3) 裝飾角色:

packagecom.abao.decorate;

public

classdecorateimplementscomponent

@override

public

voiddosomething()  

} 4)

具體裝飾角色1:

packagecom.abao.decorate;

public

classconcretedecorate1extendsdecorate

@override

public

voiddosomething()  

private

voiddoanotherdosomething()  

} 5)

具體裝飾角色2:

packagecom.abao.decorate;

public

classconcretedecorate2extendsdecorate

@override

public

voiddosomething()  

private

voiddoanotherdosomething()  

} 6)

客戶端packagecom.abao.decorate;

public

classclient

} 9. 完!

裝飾模式 Decorator

裝飾模式 decorator 動態地給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更加靈活。其中component定義了乙個物件介面,可以給這些物件動態的新增職責 concretecomponent是定義了乙個具體的物件,也可以給這個物件新增一些職責 decorator裝飾抽象類,...

Decorator 裝飾模式

定義 動態的給乙個物件新增一些輔助功能,而不改變原有的類。案例 假如現在有個文字控制項textview,它可以在螢幕上顯示文字,但當文字過多的時候,乙個螢幕顯示不下,這時就需要給它新增乙個滾動條。給乙個視窗加乙個滾動條不是原有的功能,而是額外的功能,比如還可以加乙個黑色外框,而且這些操作不是為某乙個...

裝飾模式 Decorator

裝飾模式的角色 給出乙個抽象介面,以規範準備接收附加職責的物件.定義乙個將要接收附加職責的類.持有乙個構件 component 物件的引用,並定義乙個與抽象構件介面一致的介面.負責給構件物件 貼上 附加的職責.裝飾模式的特點 裝飾模式 vs 繼承 裝飾模式 繼承 用來擴充套件特定物件的功能 用來擴充...