
614
14
章
Visitor
パターン
Visitor
パターン
オブジェクトのコンポジットに機能を加えたいものの、カプセ
ル化が重要でないときには、Visitorパターンを使いましょう。
シナリオ
オブジェクト町食堂とオブジェクト町パンケーキハウスをよく訪れ
る客たちは、最近健康志向を強めています。彼らは、食事を注文する
前にその栄養成分を尋ねるようになったのです。どちらの店も特別注
文に快く応じますが、食材ごとの栄養成分を尋ねる客もいます。
ルーが提案する解決策:
MenuItem
Menu
Ingredient
MenuItem
Ingredient
//
新しいメソッド
getHealthRating()
getCalories()
getProtein()
getCarbs()
//
新しいメソッド
getHealthRating()
getCalories()
getProtein()
getCarbs()
メルの心配
「ねえ、我々はパンドラの箱を開けようとしているようだ。どんな
新しいメソッドを次に加えることになるのかは誰にもわからない。
それに、新しいメソッドを加えるたびに
2
箇所で作業しなければな
らない。さらに、基本のアプリケーションを拡張したい場合、例え
ばレシピクラスを追加したいときはどうするんだい?
そのときは、
変更を
3
箇所でしなければいけないぞ。」