ツリー構造になっているデータをセーブするためにVisitorパターンを導入した。思いのほかうまくいってコードが大幅に簡単になった。
これまでは、ツリーのノードにSave()というメソッドを用意して、ルートから下位のノードへ順に辿る方法をとっていた。この方法だと、セーブフォーマットを増やすたびに全ての階層のフォーマットごとに別のセーブを用意するか、Save()にフォーマットを指定するパラメータを持たせなければならない。
これに対してセーブをVisitorで行えば、フォーマットの追加は新たなクラスを作成するだけで済む。

これまでVisitorパターンを使う場面がいまいち分かっていなかったのだが、今回のように木構造の末端だけを処理したいときには、非常に有効であることを実感できた。