woshidan's loose leaf

ぼんやり勉強しています

Prototypeパターン

Prototypeパターンもいまいちぴんと来ていない。

なんていうか、この辺は以下に言語そのものを学ぶ、とか、仕事とは関係なくツールを作るということをして来なかったか、の現れなのかもしれない。

まず、結城先生の本でそれぞれに上がっている本のユースケースについて眺めていく。

(1) 種類が多すぎてクラスにまとめられない場合

これ、もしかしてサンプルのような場合は、対応する出力方式と使う文字列を設定ファイルに書いておいて、 設定ファイルから読み込んだ情報を元に、出力方式に対応するクラスに文字列を与えてインスタンスを作って...、という風に書いてあったら納得していたのかも。

そういう風なことはよく考えるんですよ。

というか、一定の形式で処理したい(特に出力形式)で、設定項目が異なって...っていう場合、 どうしても、クラスを変える、というより、その、CSSのような感じ(サンプルで言うクラスがタグに、インスタンスが、タグごとのCSSに)で考えてしまうかもしれない。

もう少し動的に動くものを例に考えると変わるかも...?

(2) クラスからのインスタンス生成が難しい場合

この例の場合は実感しやすいかも。Undo / Redoをやりたい場合とか。 ただ、作った事が無いので、一回こういう例みたいなの作ってみたいなぁ.....。

(3) フレームワークと生成するインスタンスを分けたい場合

フレームワークのソースプログラムの中に、具体的に使う...。

これもやっぱりその手のフレームワークを使った事がないのに、由来しているのかも...。 仕組みを書く部分と、仕組みを利用する部分は分けた方がいいんだけど...。

触ってきたWeb系のフレームワークではそれが継承や委譲を利用して行われている感じがある...。
もっと違うタイプのツールを書いた方がいいのかもなあ。

それより納得がいったのが、検索して出てきた

標準的な方法 (例えば’new’) で新しいオブジェクトを作ることによる固有のコストが所与のアプリケーションにとって高すぎる時にそれを回避する. http://futurismo.biz/archives/2800

時間のかかる作業は prototype を作成する一度だけとなり、格段に時間が節約されそうです。 クラス図にして見てみましょう。 http://www.techscore.com/tech/DesignPattern/Prototype.html/

という場面なのだけれど、これFlyWeightな印象を受けるのですわ...

やっぱり、今まで寄り道する余裕が無かったけれど、もうちょっと別のプログラミングもやった方が考えの幅は広がるんだろうなぁ。