Decorator

1 意圖:動態地給一個對象添加一些額外的職責。就增長功能來講,Decorator模式相比生成子類更靈活。app

2 別名:包裝器Wrapper指針

3 動機:將組件嵌入到另外一個對象中,由這個對象添加邊框。嵌入的對象叫作裝飾。裝飾的接口與所裝飾的組件接口一致,所以對客戶透明。對象

           因爲透明,能夠遞歸嵌套多個裝飾,添加任意多的功能。繼承

4 適用性:遞歸

   . 不影響其餘對象的狀況下,以動態、透明的方式給單個對象添加職責。接口

   . 處理那些能夠撤銷的職責it

   . 當不能採用生成子類的方式擴充時。大量獨立的擴展,爲支持每一種組合將產生大量的子類。擴展

     一種狀況,有大量獨立的擴展,爲支持每一種組合將產生大量子類,子類數目爆炸性增加。請求

     另外一種狀況,由於類定義被隱藏,類定義不能生成子類。co

5 參與者:

   . Component 定義一個對象接口,能夠給這些對象動態添加職責

   . ConcreteComponent:定義一個對象,給這個對象添加一些職責

   . Decrator:爲之一個指向Component對象的指針,定義一個與Component接口一致的接口。

   . ConcreteDecrator:向組件添加職責

6 協做:

  Decorator將請求轉發給它的Component對象,並有可能在轉發請求先後執行一些附加的動做。

7 效果:

   優勢:

   1)比靜態繼承更靈活

   2)避免在層次結構高層的類有太多的特徵

   3)Decorator與Component不同

   4)有許多小對象

8 實現:

   1)接口的一致性

   2)省略抽象的Decorator

   3)保持Component類的簡單性

   4)改變對象外殼與改變對象內核

9 相關模式:

   . Adapter只改變接口,Decorator僅改變職責

   . Composite模式:可將裝飾視爲只有一個退化的、僅有一個組件的組合。

   . Strategy改變對象的內核, Decorator改變對象的外殼

相關文章
相關標籤/搜索