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

Prototypeパターン とは?

💡 設計図から作るより、完成品をコピーしたほうが早い
📌 このページのポイント
Prototypeパターン:原型からクローンを生成 Prototype(原型) 設定済みオブジェクト HP:100 / 攻撃力:30 / 防御:20 clone() Clone 1 HP:100 / 攻撃:30 位置: (10, 20) Clone 2 HP:100 / 攻撃:30 位置: (50, 80) Clone 3 HP:100 / 攻撃:30 位置: (90, 40) 内部状態は共有、外部状態(位置など)は各Cloneが独立して管理
Prototypeパターン:原型オブジェクトをclone()で複製して生成コストを削減
ひよこ ひよこ

複雑な設定を持つオブジェクトを何度も作るのって大変そうだね!

ペンギン先生 ペンギン先生

そうだよ。データベース接続情報とか、大量の初期設定を毎回コンストラクタで組み立てるのはコストがかかるんだ。Prototypeパターンはそこを解決してくれるよ。

ひよこ ひよこ

どうやって解決するの?

ペンギン先生 ペンギン先生

一度完成したオブジェクトを「原型(プロトタイプ)」として保存しておいて、必要なときにclone()でコピーするんだよ。コンストラクタを呼ばずに複製できるから速いんだ。

ひよこ ひよこ

コピーって浅いコピー深いコピーがあるって聞いたけど、どっちを使うの?

ペンギン先生 ペンギン先生

いい質問!内部にオブジェクトを持つ場合は「深いコピーディープコピー)」が必要だよ。浅いコピーだと内部の参照が共有されてしまって、片方を変更したらもう片方も変わってしまうからね。

ひよこ ひよこ

ゲームのキャラクター生成とかに使えそうだね!

ペンギン先生 ペンギン先生

まさに!敵キャラの基本ステータスをプロトタイプとして持っておいて、出現するたびにcloneするのは典型的な使い方だよ。JavaScriptのprototypeチェーンもこの概念から来ているんだよ。

ひよこ ひよこ

JavaScriptにも関係があるんだね!身近なパターンだったんだね。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Prototypeパターン」って出てきたら「既存オブジェクトをコピーして新しいオブジェクトを作る設計」と思えばだいたいOK!
📖 おまけ:英語の意味
「Prototype Pattern」 = 原型パターン
💬 Prototypeは「最初の型・原型」という意味で、原型をもとに複製品を量産する工場をイメージするとわかりやすいだよ
← 用語集にもどる