Visitor Pattern

ゼミで聞いただけでは、理解が不十分だったので、
積読になっていた Java言語で学ぶデザインパターン入門 で復習。
18ページもあるんですが(あるからこそ?)、分かりやすい。

  • なんで単純なforループにしないの?

処理(Vistor)をデータ構造(Accepter)から分離したいから。
=OCP(The Open-Closed Principle)を守るため。
OCP=クラス修正なし、クラス追加のみで機能拡張。


単純なforループでは、データ構造保持用のクラスの中に処理が埋め込まれるので、
処理の種類が増える度に、クラスの修正が必要。


でも、Visitor Pattern を使えば、
処理の種類が増えても、新しいVistorを追加するだけ。
既存のクラスの修正は不要。

  • どんな時使うの?

データ構造(Accepter)がカッチリ決まっているが、
処理(Visitor)はコロコロ変わったり、よく増えたりする場合。
Visitorの変更・増減は、Accepterに影響しないので、Visitor Pattern向き。

  • 使っちゃ駄目な場合は?

データ構造が固まっていない場合。
Accepterの変更・増減は、全てのVisitorに影響してしまう。
なので、データ構造が流動的な場合には、使えない。