コンテンツにスキップ

FactoryMethod

生成メソッドの実際の生成責務をサブクラスへ委譲するパターンです。

  • 武器ごとに投射体生成ルールが異なるとき
  • 型ごとの初期化ロジックを分離したいとき
  • Creator
  • Concrete Creator
  • Product

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

using UnityEngine;
public interface IProjectile
{
void Fire(Vector3 startPosition, Vector3 direction);
}
public abstract class ProjectileSpawner : MonoBehaviour
{
public void Shoot(Vector3 startPosition, Vector3 direction)
{
IProjectile projectile = CreateProjectile();
projectile.Fire(startPosition, direction);
}
protected abstract IProjectile CreateProjectile();
}
  • モジュール境界が明確になり、結合度を下げられます。
  • 既存コードを変更せずに機能拡張や統合がしやすくなります。
  • ラッパー層が深くなりすぎるとデバッグが難しくなります。
  • 責務境界が曖昧にならないよう、インターフェースは小さく保つべきです。

親は生成手順を維持しつつ、実際の生成型は子クラスが決める流れです。

Factory Method の流れ