Prototype

今回はPrototypeの復習です。


Prototypeパターン
このではインスタンスの生成を、既存のインスタンスのコピーで行います。
これは、クラスとして表現するにはあまりにも複雑すぎるインスタンスの生成を行う際に威力を発揮します。
例えばペイントソフトなどで描いた描画、ゲームなどの長時間かけて育成したキャラクターなどのデータ。
これらのインスタンスはそのインスタンスが生成されるまでに複雑な過程を経ています。
これらに対してのクラスを用意してインスタンスを生成してやるよりも、既存のインスタンスをコピーして生成したほうがはるかに生成しやすいでしょう。
また、これらのインスタンスは生成過程が複雑な分、非常に多くの種類にわかれるでしょうから、それらをいちいちクラスとして定義しようとすると膨大な労力を要し、コードの可読性なども下がります。
そのような労力は無駄どころか有害です。
このように、インスタンスをコピーすることでインスタンスを生成するメリットを享受するパターンがPrototypeパターンです。


浅い複製
インスタンスのコピーを行う際、浅い複製についての問題がつきまといます。
浅い複製とは、インスタンスの持つ値を全て複製することです。
コピー元のインスタンスが参照の値などを保持していた場合、コピーしたインスタンスを操作したらコピー元のインスタンスにも影響が出たという事になりかねません。
ですから、コピー後の操作などはインスタンスの特性毎に記述されなければならないでしょう。
Prototypeパターンを使いこなすには「浅い複製」への理解が必要不可欠なようです。