天天看點

Java設計模式--裝飾模式裝飾模式(别名:包裝類)Decorator Pattern(Another Name: Wrapper)類圖模式的結構與使用簡單的例子裝飾模式的優點适用裝飾模式的情景下載下傳源碼請到

動态地給對象添加一些額外的職責。就功能來說裝飾模式相比生成子類更為靈活。

attach additional responsibilities to an object dynamically。decorators provide a flexible alternative to subclassing for extending functionality.

Java設計模式--裝飾模式裝飾模式(别名:包裝類)Decorator Pattern(Another Name: Wrapper)類圖模式的結構與使用簡單的例子裝飾模式的優點适用裝飾模式的情景下載下傳源碼請到

裝飾模式的結構中包括四個角色。

+ 抽象元件(component):抽象元件是一個抽象類或者接口。抽象元件定義了“被裝飾者”需要進行“裝飾”的方法。

+ 具體産品(concretecomponent):具體元件是抽象元件的一個子類,具體元件的執行個體稱為“被裝飾者”。

+ 裝飾(decorator):裝飾也是抽象元件的一個子類,但裝飾還包含一個抽象元件聲明的變量以儲存“被裝飾者”的引用。裝飾可以是抽象類也可以是一個非抽象類,如果是非抽象類,那麼該類的執行個體稱作“裝飾者”。

+ 具體裝飾(concretedecorator):具體裝飾是裝飾的一個非抽象子類,具體裝飾的執行個體稱作“裝飾者”。

被裝飾者和裝飾者是松耦合關系。由于裝飾(decorator)僅僅依賴于抽象元件(component),是以具體裝飾隻知道它要裝飾的對象是抽象元件某一個子類的執行個體,但不需要知道是哪一個具體子類。

裝飾模式滿足“開-閉原則”。不必修改具體元件,就可以增加新的針對該具體元件的具體裝飾。

可以使用多個具體裝飾來裝飾具體元件的執行個體。

程式希望動态地增強類的某個對象的功能,而又不影響到該類的其他對象。

采用繼承來增強對象功能不利于系統的擴充和維護。

<a href="https://github.com/androidwolf">mygithub</a>