裝飾器模式

2021-09-13 15:26:46 字數 1451 閱讀 1247

1、什麼是裝飾器模式

裝飾器模式,也成為包裝模式,顧名思義,就是對已經存在的某些類進行裝飾,以此來擴充套件一些功能。其結構圖如下:

component為統一介面,也是裝飾類和被裝飾類的基本型別。

concretecomponent為具體實現類,也是被裝飾類,他本身是個具有一些功能的完整的類。

decorator是裝飾類,實現了component介面的同時還在內部維護了乙個concretecomponent的例項,並可以通過建構函式初始化。而decorator本身,通常採用預設實現,他的存在僅僅是乙個宣告:我要生產出一些用於裝飾的子類了。而其子類才是賦有具體裝飾效果的裝飾產品類。

concretedecorator是具體的裝飾產品類,每一種裝飾產品都具有特定的裝飾效果。可以通過構造器宣告裝飾哪種型別的concretecomponent,從而對其進行裝飾。

2、裝飾器模式案例

//房屋基礎介面

public inte***ce house

//房屋裝飾類

public class housedecorate implements house

@override

public void run()

}

public class housedecorateimpl extends housedecorate 

@override

public void run()

}

//客戶端呼叫

public class clienttest

}

3、裝飾器模式和**模式的區別

裝飾器模式關注於在乙個物件上動態的新增方法,然而**模式關注於控制對物件的訪問。換句話 說,用**模式,**類(proxy class)可以對它的客戶隱藏乙個物件的具體資訊。因此,當使用**模式的時候,我們常常在乙個**類中建立乙個物件的例項。並且,當我們使用裝飾器模 式的時候,我們通常的做法是將原始物件作為乙個引數傳給裝飾者的構造器。

4、裝飾器模式應用場景

在io中,具體構件角色是節點流,裝飾角色是過濾流。

filterinputstream和filteroutputstream是裝飾角色,而其他派生自它們的類則是具體裝飾角色。

dataoutputstream out=new dataoutputstream(new fileoutputstream());

這就是 裝飾者模式,dataoutputstream是裝飾者子類,fileoutputstream是實現介面的子類。

這裡不會呼叫到裝飾者類--filteroutputstream,只是作為繼承的另一種方案,對客戶端來說是透明的,是為了功能的擴張.

裝飾器模式

大話設計模式 裝飾器模式 為已有功能動態地新增更多功能,當系統需要新功能,向舊的類中新增新功能,裝飾了原有類的核心職責和行為,而不改變它們 就像包裝袋一樣,有 的包裝袋包裝之前裝好東西的包裝袋 ifndef clothes h define clothes h include using names...

裝飾器模式

裝飾器設計模式 對真實物件動態的新增功能 抽象元件 author zhangjianbin public inte ce icar 俱體構件物件 真實的物件 author zhangjianbin class car implements icar 裝飾器物件 author zhangjianbin...

裝飾器模式

一 概念 裝飾模式能夠實現動態的為物件新增功能,是從乙個物件外部來給物件新增功能。通常給物件新增功能,要麼直接修改物件新增相應的功能,要麼派生對應的子類來擴充套件,抑或是使用物件組合的方式。顯然,直接修改對應的類這種方式並不可取。在物件導向的設計中,而我們也應該 盡量使用物件組合,而不是物件繼承來擴...