【びじたーぱたーん】
Visitorパターン とは?
最終更新:
💡 同じ要素に、別の訪問者で新しい処理
データ構造の要素と、それに適用する操作を分けるデザインパターン。要素がVisitorを受け入れる仕組みを用意すると、新しい操作を別のVisitorとして追加しやすくなる。
📌 このページのポイント
- 要素を表すクラスと、操作を表すVisitorを分ける
- 各要素のacceptから、型に対応するVisitorの処理を呼ぶ
- 要素の種類が安定し、操作を増やしたい場合に向く
- 要素の種類を増やすと、Visitor側の対応も必要になる
Visitorは何を訪問するの?
要素のクラスは一度も変更しなくていい?
最初にVisitorを受け入れるacceptなどの仕組みが必要だよ。その仕組みと必要なデータへのアクセスがそろっていれば、操作を増やすたびに要素のクラスへ処理を追加する手間を減らせる。導入や動作確認まで不要になるわけではないんだ。
acceptとvisitは、どちらが呼ぶの?
呼び出し側が要素のaccept(visitor)を呼び、要素がVisitorの型に対応した処理を呼ぶよ。たとえばFile.acceptはvisitor.visitFile(this)へ渡す。このように、要素とVisitorの両方に応じて処理を選ぶ仕組みをダブルディスパッチと説明するんだ。
要素の種類が増えても便利?
操作を増やすのは得意だけれど、新しい種類の要素を追加すると、その種類を扱う処理もVisitor側へ用意する必要があるよ。デフォルト処理で影響を抑える実装もある。要素の種類が安定し、操作が増える場面で使いやすい設計なんだ。
まとめ:ざっくりこれだけ覚えればOK!
「Visitorパターン」って出てきたら「要素と操作を分け、訪問者として処理を追加する設計」と思えればだいたいOK!
📖 おまけ:英語の意味
「Visitor Pattern」 = 訪問者パターン
💬 visitor は「訪問者」という意味で、データ構造の各要素を「訪問」しながら処理を行う外部のオブジェクト(訪問者)という比喩から名付けられたんだよ。