本文へスキップ

ビジターパターンとは?

びじたーぱたーん

ビジターパターンとは、オブジェクトの構造を変えずに新しい操作を追加できるデザインパターンで、処理をオブジェクト本体から分離することが目的です。

ビジターパターン(Visitor Pattern)は、オブジェクト指向設計における「GoFデザインパターン」の行動パターンのひとつです。データ構造(要素群)を変更することなく、新たな操作(処理)を外部から追加できるように設計する手法です。

基本的な仕組みとして、「訪問される側(Element)」と「訪問する側(Visitor)」を明確に分離します。Elementは accept(visitor) メソッドを持ち、Visitorを受け入れます。Visitorは各Elementの種類ごとに visit(element) メソッドを持ち、具体的な処理を記述します。これにより「ダブルディスパッチ」(二重の動的ディスパッチ)が実現されます。

ビジターパターンが有効な場面は以下のとおりです。

  • 同一のオブジェクト構造に対して複数の異なる処理を適用したい場合
  • オブジェクト構造の変更は避けたいが、新しい処理を増やしたい場合
  • コンパイラのAST(抽象構文木)巡回処理などの用途

一方で、新しいElement(要素の種類)を追加するたびに全Visitorの修正が必要になるというデメリットもあります。要素の種類が安定していて処理の種類が増える場合に適したパターンといえます。

使い方・例文

コンパイラ開発で、構文木の各ノード(式・文・宣言など)に対して「型チェック」「コード生成」「最適化」といった複数の処理を追加したいとき、ビジターパターンを使うと各処理をVisitorクラスとして独立させて実装できます。

この用語をシェア

𝕏 でポスト LINE

最終更新:

関連用語