コンテンツにスキップ

Prototype

新しいオブジェクトをコンストラクタ呼び出しではなく、既存の原型を複製して作るパターンです。

  • モンスターテンプレートを複製してランタイムインスタンスを作るとき
  • 生成コストの高いオブジェクトを素早く複製したいとき
  • Prototype
  • Clone
  • Prototype Registry

以下のコードは、上で説明した状況を Unity プロジェクトの文脈で単純化した例です。

using UnityEngine;
[CreateAssetMenu(menuName = "Game/Enemy Archetype Data")]
public sealed class EnemyArchetypeData : ScriptableObject
{
public int baseHealth;
public float moveSpeed;
public EnemyRuntimeData CloneRuntimeData()
{
return new EnemyRuntimeData(baseHealth, moveSpeed);
}
}
public sealed class EnemyRuntimeData
{
public int CurrentHealth;
public float CurrentMoveSpeed;
public EnemyRuntimeData(int currentHealth, float currentMoveSpeed)
{
CurrentHealth = currentHealth;
CurrentMoveSpeed = currentMoveSpeed;
}
}
  • オブジェクト生成責務が整理され、依存関係の管理がしやすくなります。
  • 環境や状況ごとに生成方針を柔軟に変えられます。
  • 単純な問題に過度な生成抽象化を入れないようにする必要があります。
  • 生成ルールが増えるほど、文書とテストの同期が重要になります。

登録済みの原型を複製し、ランタイム値を重ねてインスタンス化する流れです。

Prototype の流れ