コンテンツにスキップ

Singleton

インスタンスを 1 つだけ維持し、グローバルなアクセスポイントを提供するパターンです。

  • ゲーム設定やログのように単一サービスが必要なとき
  • シーン間で維持されるマネージャーを置くとき
  • Singleton Instance
  • Global Accessor
  • Lifetime Guard

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

using UnityEngine;
public sealed class GameSettingsService : MonoBehaviour
{
public static GameSettingsService Instance { get; private set; }
private void Awake()
{
if (Instance != null && Instance != this)
{
Destroy(gameObject);
return;
}
Instance = this;
DontDestroyOnLoad(gameObject);
}
}
  • オブジェクト生成責務が整理され、依存関係の管理がしやすくなります。
  • 環境や状況ごとに生成方針を柔軟に変えられます。
  • 単純な問題に過度な生成抽象化を入れないようにする必要があります。
  • 生成ルールが増えるほど、文書とテストの同期が重要になります。

複数の呼び出し元が同じインスタンスを共有する流れです。

Singleton の流れ