Visitor
目的
あるオブジェクト構造(例えばツリー構造)上の要素オブジェクトで実行されるオペレーションを表現する。
要素オブジェクトのクラスには変更を加えずに、新しいオペレーションを定義できるようにする。
様々な対象に適用される共通のオペレーションを別オブジェクトに分離する。
構造
注釈
- Visitorパターンは、ConcreteElementの組が固定されていて、それらに対するオペレーションが頻繁に追加される場合に向いている。その場合は、新しいConcreteVisitorクラスを1つ追加するだけで済むからである。一方、ConcreteElementクラスが頻繁に追加される場合には向かない。その場合、既存の全てのConcreteVisitorクラスを変更することになるが、Visitorパターンを適用せずに既存の全てのConcreteElementクラスを変更するのと変わらなくなってしまう。
- ConcreteElementクラスのインタフェースは、Visitorクラスに分離したオペレーションが仕事するのに必要な操作を提供する必要がある。このため、それらのオペレーションをConcreteElementクラス内に定義する場合に比べ、ConcreteElementクラスのカプセル化に妥協が生じるかもしれない。
- 抽象ElementクラスのAccept()メソッドは、ダブルディスパッチオペレーションである。つまり、2つの型(Visitorの型とElementの型)に依存して振る舞いが変わる。
最終更新:2012年02月07日 12:18