
Decorator
パターンとの出会い
継承を使って飲み物とコンディメントを表すのは、あまりうまくいかない
ことがわかりました。クラス爆発や硬直した設計となり、一部のサブクラス
にとって不適切な機能を基底クラスに追加することになってしまいます。
その代わりに何を行えばよいかをここで示します。まずは飲み物から始め、
実行時に飲み物をコンディメントで「装飾」します。例えば、客がモカとホ
イップ付きのダークローストを頼みたい場合、以下のようにします。
1
2
DarkRoast
オブジェクトを取り出す。
そのオブジェクトを
Mocha
オブジェクトで装飾する。
3
そのオブジェクトを
Whip
オブジェクトで装飾する。
4
cost()
メソッドを呼び出し、委譲に頼ってコンディメントの料金
を追加する。
なるほど。しかし、どのようにオブジェクトを「装飾」し、どのように委
譲を導入したらいいでしょうか?(ヒント:デコレータオブジェクトを
「ラッパー」と考えましょう。そしてこれがどのように動作するかを調べま
しょう)
「オブジェクト指向設計
クラブ」はもうたくさんだよ。こっちは現
実の問題があるんだぜ。スターバズコーヒー
のことを覚えているかい?
これらの設計原則を使
用してスターバズコーヒーを実際に助けること
ができると思うかい?
88
3
章
Decorator
パターンとの出会い