DesignPatterns > Visitor

Visitor


目的

あるオブジェクト構造(例えばツリー構造)上の要素オブジェクトで実行されるオペレーションを表現する。
要素オブジェクトのクラスには変更を加えずに、新しいオペレーションを定義できるようにする。
様々な対象に適用される共通のオペレーションを別オブジェクトに分離する。

構造


注釈

  • Visitorパターンは、ConcreteElementの組が固定されていて、それらに対するオペレーションが頻繁に追加される場合に向いている。その場合は、新しいConcreteVisitorクラスを1つ追加するだけで済むからである。一方、ConcreteElementクラスが頻繁に追加される場合には向かない。その場合、既存の全てのConcreteVisitorクラスを変更することになるが、Visitorパターンを適用せずに既存の全てのConcreteElementクラスを変更するのと変わらなくなってしまう。
  • ConcreteElementクラスのインタフェースは、Visitorクラスに分離したオペレーションが仕事するのに必要な操作を提供する必要がある。このため、それらのオペレーションをConcreteElementクラス内に定義する場合に比べ、ConcreteElementクラスのカプセル化に妥協が生じるかもしれない。
  • 抽象ElementクラスのAccept()メソッドは、ダブルディスパッチオペレーションである。つまり、2つの型(Visitorの型とElementの型)に依存して振る舞いが変わる。


最終更新:2012年02月07日 12:18
添付ファイル