
Decoratorパターンはオブジェクトに追加の
責務を動的に付与する。デコレータは、サブ
クラス化の代替となる、柔軟な機能拡張手段
を備えている。
Decorator
パターンの定義
デコレータは、装飾するコン
ポーネントと同じインタフェー
スや抽象クラスを実装します。
methodA()
methodB()
//
他のメソッド
ConcreteComponent
コンポーネント
methodA()
methodB()
//
他のメソッド
Component
ConcreteDecorator
は、装飾するオブジェクト
(
Decorator
がラップする
Component
)のインスタン
ス変数を(
Decorator
クラス
から)継承します。
デコレータは新しいメソッドを追加できます。しかし一般
に、新しい振る舞いは、コンポーネントの既存メソッドの前
または後に計算を行って追加します。
各デコレータはコンポーネン
トを持ちます(ラップします、
HAS-A
関係)。つまり、デコ
レータはコンポーネントへの参
照を保持するインスタンス変数
を持つのです。
ConcreteComponent
オブジェクトには新しい
振る舞いが動的に追加さ
れます。このオブジェク
トは
Component
を拡張
します。
まず、
Decorator
パターンの定義を見てみましょう。
この定義は
Decorator
パターンの役割を示しますが、このパターンを自分の
実装に適用する方法についてははっきりしません。以下のクラス図を見てみま
しょう。この図を見るともう少しはっきりします(次のページでは、飲み物の ...