MyEnigma

とある自律移動システムエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

C++によるデザインパターン13: Visitor パターン

Visitor パターン

Visitorパターンは、

データ構造とそのデータに対する処理を分ける

デザインパターンです。


データ構造のクラスと、

そのデータに対する処理のクラスを分け、

お互いが自分のオブジェクトのポインタを渡しあうことで、

データを処理します。

このような処理の方法をダブルディスパッチといいます。

ダブルディスパッチ - Wikipedia


データ処理のクラスのオブジェクトが、

それぞれのデータを渡り歩いて処理をする様子から

Visitorパターンと言われています。


このパターンを利用することで、

機能追加する際にはデータ処理クラスのみを変更すればよく、

データ構造のクラスは変更しなくて良くなります。


今回のサンプルコードは

以前のCompositeパターンのサンプルコードを使用し、

Visitorパターンでディレクトリツリーの

ファイル構成を表示する機能を実装しました。

C++によるデザインパターン11: Composite パターン - MY ENIGMA


Compositeパターンのサンプルコードと比較すると、

DirectoryとFileクラスをほとんど変更せずに、

処理を追加できていることがわかります。


しかし、このVisitorパターンを使用すると、

VisitorクラスにEntryの中身を公開する必要があるため

データのカプセル性が劣化してしまうことが、

個人的には欠点だと思います。


C++によるサンプルコード

下記のGitHubページにて公開しています。

cpp/Visitor.cpp at master - AtsushiSakai/cpp

MyEnigma Supporters

もしこの記事が参考になり、

ブログをサポートしたいと思われた方は、

こちらからよろしくお願いします。

myenigma.hatenablog.com