Prototypeパターンとは、既存のオブジェクトをコピーして新しいオブジェクトを生成するデザインパターンだ。これにより、同じ構造のオブジェクトを効率よく作成できる。
たとえば、ゲームのキャラクターを複製して、新しいキャラクターを簡単に作りたい場合、このパターンを使うことができる。
では、サンプルコードを一緒に見ていこう。
例えば、ある動物園がいて、その動物園にはライオンやゾウなどの動物がいるとしよう。新しい動物を追加するときに、すでにいる動物を元にして新しい動物を簡単に作り出す方法がPrototypeパターンだ。
まず、基本的な動物クラスを作るよ。すべての動物は名前と種類を持っているとする。このクラスには「鳴く」ためのメソッドも追加しよう。
// 基本的な動物クラス
class Animal {
constructor(name, species) {
this.name = name;
this.species = species;
}
speak() {
console.log(`${this.name}(${this.species})が鳴いています。`);
}
}
次に、ある動物を元に新しい動物を複製(クローン)できるように、Prototypeパターンを使うよ。ここでは、Object.create()
メソッドを使って既存の動物を複製する。
// 既存の動物をクローンする
const originalLion = new Animal("シンバ", "ライオン");
const clonedLion = Object.create(originalLion);
clonedLion.name = "ナラ"; // 名前だけ変えて新しい動物を作る
clonedLion.speak(); // 結果: ナラ(ライオン)が鳴いています。
ここで、クローンされた動物が元の動物と同じ種類を持ちながら、名前などのプロパティが違うことを確認しよう。
// 元のライオンとクローンされたライオンの比較
originalLion.speak(); // 結果: シンバ(ライオン)が鳴いています。
clonedLion.speak(); // 結果: ナラ(ライオン)が鳴いています。
Prototypeパターンを使えば、他の種類の動物も簡単に作れるよ。たとえば、ゾウを元に新しいゾウをクローンすることもできるんだ。
// 新しいゾウを作る
const originalElephant = new Animal("ダンボ", "ゾウ");
const clonedElephant = Object.create(originalElephant);
clonedElephant.name = "ジャンボ";
clonedElephant.speak(); // 結果: ジャンボ(ゾウ)が鳴いています。
これでPrototypeパターンの解説は終わりだ。
このパターンを使うと、オブジェクトをコピーするだけで簡単に複製できるため、大量の同じ種類のオブジェクトを生成したいときに便利だ。