復習:Visitor

今回はVisitorパターンの復習です。


Visitorパターン
Visiorパターンは、データ構造とそれに対する処理を分離させるパターンです。
データ構造とそれに対する処理をそれぞれ別クラスにして分離させます。


また処理を行うメソッドは全て同一の名称となっており、処理を行うクラスを引数にとる形になっています。
新しい処理を追加する際は、処理を行うクラスを増やすだけで処理の種類を増やせます。
処理を行うクラスを引数としたメソッド(acceptメソッド)が全ての処理対象のクラスに存在します。
これにより、処理の内容によらず拡張がしやすくなっているわけです。


処理を行うクラスが、対象クラスに対して「訪問」を行うのでVisitorクラスという名前がついています。

ダブルディスパッチ
Visitorパターンにおける共通のメソッド(acceptメソッド)ではダブルディスパッチというテクニックが使われています。
ダブルディスパッチでは、関数のオーバーライドとオーバーロードを組み合わせることで、適切な関数を呼び出せるようになっています。
こちらに詳しい説明があったので参考にさせて頂きました。
Visitorパターンで使われている"ダブルディスパッチ"とは?

オーバーロードとオーバーライドについては過去に軽く記事を書いていたのでそれも参考にしてみます。
オーバーロードとオーバーライド
クラスによって異なる処理が実装されている時に、いかにして一つだけのメソッドでそれらに対する区別を行うかということですね。
ダブルディスパッチはオブジェクト指向の機能をふんだんに使ったテクニックのようです。
この理解ではまだまだ不足だと思われるので、また時間を見つけて勉強したいと思います。
これについてしっかり理解しておけば後々大きな助けになると思われます。