【プロトタイプパターン】

Prototypeパターン とは?

最終更新:
💡 完成した原型から、仲間をコピーして作る

既存のオブジェクトを原型として複製し、新しいオブジェクトを作るデザインパターン。原型の状態を引き継ぎながら、必要な部分を変更して使える。

📌 このページのポイント
Prototype:原型から仲間を作る原型の敵キャラHP 100 / 攻撃 30敵AHP 100敵BHP 80敵CHP 100コピー後に、それぞれの状態を変える
敵キャラを複製して、敵BのHPだけを変えた例。内部のデータを共有するか独立させるかは、用途に合わせて設計します。
ひよこ ひよこ
Prototypeパターンって何をコピーするの?
ペンギン先生 ペンギン先生
既存のオブジェクトを原型にして、新しいオブジェクトを作るんだ。例えばゲームの敵キャラの基本設定を用意し、その状態を引き継いだ敵を複製するイメージだよ。
ひよこ ひよこ
普通にnewで作るのと何が違うの?
ペンギン先生 ペンギン先生
利用側が具体的なクラスや初期設定を毎回組み立てる代わりに、原型の複製機能を呼ぶんだ。cloneという名前がよく使われるけれど、名前そのものが決まりではないよ。原型を変えれば、作るオブジェクトの種類や状態も変えられる。
ひよこ ひよこ
コピーなら必ず速くなる?
ペンギン先生 ペンギン先生
必ずとは限らないよ。複製するデータが多ければ時間やメモリが必要になる。初期化を繰り返すより有利な場合もあるけれど、実際の処理で測って判断しよう。
ひよこ ひよこ
浅いコピーと深いコピーはどちらが必要なの?
ペンギン先生 ペンギン先生
浅いコピーでは、内部のオブジェクトへの参照が共有されることがある。別々に変更したい持ち物の一覧などは独立して複製する一方、変更しない共通データは共有してもよい。何を共有し、何を独立させるかを決めるのが大切で、全部を深くコピーする必要はないよ。
ひよこ ひよこ
JavaScriptのprototypeも、コピーする仕組み?
ペンギン先生 ペンギン先生
JavaScriptのプロトタイプチェーンは、オブジェクトに見つからないプロパティを別のオブジェクトへ探しに行く仕組みだよ。このデザインパターンの「原型から複製を作ること」とは区別しよう。名前が似ていても、同じ動作ではないんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Prototypeパターン」って出てきたら「できあがったオブジェクトを原型にして仲間をコピーする設計」と思えばだいたいOK!
📖 おまけ:英語の意味
「Prototype Pattern」 = 原型パターン
💬 Prototypeは「原型」の意味。できあがった原型から複製を作る考え方だよ。

参考資料

← 用語集にもどる