Visitorパターン
ポイント: クラスを2分する
N種類のデータを保持するクラス
↑本来、この中にアルゴリズムをもたせることはしたくない
データにアクセスするアルゴリズムを実装するクラスを実装
「Visitorクラス」と命名
これ1つがやりたいこと1つの概念になる
Visitorクラスには、複数のメソッドを実装
N種データ型があれば、それぞれその型を引数に取るfoo_visit(type C)をN種作成する
データ側にはVisitorクラスを引数に取るaccept()メソッドを実装
データは、accept()の中で自分自身をVisitorクラスに実行してもらう