コンテンツにスキップ

Builder

複雑なオブジェクト生成過程を段階的に分離し、可読性と安全性を高めるパターンです。

  • オプションの多い設定オブジェクトを作るとき
  • 同じ手順で異なる結果物を作りたいとき
  • Builder
  • Director (任意)
  • Product

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

public sealed class EnemyWaveConfig
{
public int EnemyCount;
public float SpawnIntervalSeconds;
public string RewardId;
}
public sealed class EnemyWaveBuilder
{
private readonly EnemyWaveConfig waveConfig = new();
public EnemyWaveBuilder SetEnemyCount(int enemyCount)
{
waveConfig.EnemyCount = enemyCount;
return this;
}
public EnemyWaveBuilder SetSpawnInterval(float spawnIntervalSeconds)
{
waveConfig.SpawnIntervalSeconds = spawnIntervalSeconds;
return this;
}
public EnemyWaveBuilder SetReward(string rewardId)
{
waveConfig.RewardId = rewardId;
return this;
}
public EnemyWaveConfig Build() => waveConfig;
}
  • オブジェクト生成責務が整理され、依存関係の管理がしやすくなります。
  • 環境や状況ごとに生成方針を柔軟に変えられます。
  • 単純な問題に過度な生成抽象化を入れないようにする必要があります。
  • 生成ルールが増えるほど、文書とテストの同期が重要になります。

複雑なオブジェクトを段階的に組み立て、最後に結果を返す流れです。

Builder の流れ