はじめに
http://qiita.com/ms2sato/items/416dd5c2db88997deb0c
これの続きみたいなもの。調子に乗って次はVisitorパターンとCompositeパターン。大体一緒に出るだろうから。
せいか
構造化エディタ的なものを書きました。コンテンツと背景色が変えられるようなものです(新規追加は怠けてしまってできません)。
jsdo.it http://jsdo.it/ms2sato/uOR0
github https://github.com/ms2sato/gof/blob/master/visitor/main.coffee
おもっていること
型のない言語だとわかりにくいですが、本来は
- 抽象化し過ぎて実体にアクセスしにくい場合にその方法を提供する為(これがないと型を調べてキャストするような操作が発生して、抽象化を破壊してしまう)。
- 操作できるオブジェクトの種類と、操作の種類そのものについて開いた設計にする為
に作るのがVisitorだと思います。Compositeするとよくこの状況に陥るので殆どセットで出てくるというのが自分の経験上の感覚です。でも、最近の緩い言語触っていると型を調べて分岐するのを当たり前に書いたりするから、そういう作り方でも良いのかもしれませんね。いらない子扱いされてしまいそうなのもわかる気がします。私のコードでもオーバーロードで解決するところをconstructorの名前を調べて分岐していますしね。
ifが出てこないのはStateパターンと同様。