裝飾者模式 結構型

2021-09-20 14:35:08 字數 1380 閱讀 5552

裝飾器模式: 動態地給乙個物件新增一些額外的職責或者行為。就增加功能來說, decorator模式相比生成子類更為靈活。

裝飾器模式提供了改變子類的靈活方案。裝飾器模式在不必改變原類檔案和使用繼承的情況下,動態的擴充套件乙個物件的功能。它是通過建立乙個包裝物件,也就是裝飾來包裹真實的物件。

在裝飾模式中的角色有:

抽象構件(component)角色:給出乙個抽象介面,以規範準備接收附加責任的物件。

具體構件(concretecomponent)角色:定義乙個將要接收附加責任的類。

裝飾(decorator)角色:持有乙個構件(component)物件的例項,並定義乙個與抽象構件介面一致的介面。

具體裝飾(concretedecorator)角色:負責給構件物件「貼上」附加的責任。

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

(2) 裝飾物件包含乙個真實物件的索引(reference)

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

(4) 裝飾物件可以在**這些請求以前或以後增加一些附加功能。這樣就確保了在執行時,不用修改給定物件的結構就可以在外部增加附加的功能。在物件導向的設計中,通常是通過繼承來實現對給定類的功能擴充套件。

1)adapter 模式:decorator模式不同於adapter模式,因為裝飾僅改變物件的職責而不改變它的介面(io是半透明的,有些裝飾者增加了介面沒有的方法);而介面卡將給物件乙個全新的介面。

2)composite組合模式:可以將裝飾視為乙個退化的、僅有乙個元件的組合。然而,裝飾僅給物件新增一些額外的職責—它的目的不在於物件聚集。

3)strategy策略模式:用乙個裝飾你可以改變物件的外表;而strategy模式使得你可以改變物件的核心。這是改變物件的兩種途徑。

public

class

iotest

finally

}}觀察上面的**

會發現最裡層是乙個fileinputstream物件,

然後把它傳遞給乙個bufferedinputstream物件,經過bufferedinputstream處理,

再把處理後的物件傳遞給了datainputstream物件進行處理,

這個過程其實就是裝飾器的組裝過程。

fileinputstream物件相當於原始的被裝飾的物件,而bufferedinputstream物件和datainputstream物件則相當於裝飾器。

裝飾者模式(結構型)

裝飾者模式 動態的將責任附加到物件上。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。裝飾者模式類圖 component是我們要裝飾的元件,decorator是我們的裝飾器,在這裡繼承要裝飾的元件 使用裝飾的目的就是拓展功能而不改變原有的 這樣,我們新增乙個裝飾者,客戶端依然可以呼叫原有的元...

裝飾者模式(Decorator) 結構型

1 基礎知識 定義 在不改變原有物件的基礎上,將功能附加到物件上即動態地給乙個物件新增一些額外的職責。特徵 提供了比繼承更有彈性的替代方案。本質 動態組合。使用場景 擴充套件乙個類的功能或給乙個類新增附加的職責 動態給乙個物件新增功能,這些功能還可以動態撤銷。優點 比繼承更加靈活,繼承是靜態的在設計...

設計模式 裝飾者模式 結構型

裝飾者模式 動態的給一些物件新增一些職能,就增加功能來說,裝飾者比生成子類更靈活。模型圖 public abstract class componentpublic class concretecomponet extends component public abstract class deco...