裝飾模式,又名包裝器,通過裝飾對象來動態地給對象增加功能。
下面結合如下的類圖來詳細闡述。
首先,有個需要裝飾的對象(類)——ConcreteComponent類以及它的超類或接口——Component接口,內都含一個operation方法。
現在,如果,想要拓展operation方法,一可以往Component接口中加方法,然後ConcreteComponent實現,但這樣比較麻煩,每增加一個方法就必須改一次接口;而可以用裝飾模式動態增加。方法爲:
1.建一個裝飾類Decorator(實現Component接口,並且含有接口對象component)
2.通過繼承裝飾類Decorator得到子類ConcreteDecorator,這個子類可以動態增加新的方法,並且把該方法的調用放到該子類的operation()方法中,通過這樣覆寫operation方法來實現新方法的增加。
最後,附張比較表:
模式名 |
代理 | 適配器 | 裝飾 |
目的 | 控制對對象的訪問 | 用來處理接口間不匹配的問題,往往替所適配的對象提供一個不同的接口 | 動態的爲某個類型添加新的職責,也就是動態的增加功能 |