Skip to content

Builder

A pattern that separates complex object creation into steps to improve readability and safety.

  • When creating configuration objects with many options.
  • When the same process produces different results.
  • Builder
  • Director (optional)
  • Product

The code below is a simplified Unity example based on the scenario described above.

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;
}
  • Object creation responsibilities are well organized, which makes dependency management easier.
  • Creation policies can be changed flexibly by environment or situation.
  • Avoid introducing overly abstract creation layers for simple problems.
  • As creation rules increase, keeping documentation and tests in sync becomes more important.

This shows the flow where a complex object is assembled step by step and returned at the end.

Builder Flow