View on GitHub

adventure-cube

Singletonパターン

だれもがどのプロジェクトで1回は使うであろうパターンです。

Singletonとは

シングルトンとは、「一つしか存在が許されない」、ということを保証する実装です。

そのため、以下の実装を保証する必要があります。

よって、C#であれば以下のような実装を持ちます。

private LifeCycleManager instance = new LifeCycleManager();     // privateなクラス変数

private LifeCycleManager(){} //privateなコンストラクタ

public LifeCycleManager Instance => instance; // インスタンスを返す関数

グローバル変数としてのSingleton

Singletonはその特性上、staticにして、どのソースコードからも参照可能なものとして組まれることが多いです。
つまり、グローバル変数のような使い方をすることができます。

ただし、グローバル変数の多用はのちのち設計に悪い影響を与える要素が多いです。
(修正の影響範囲が大きい、オブジェクト処理のフローが多数できることにより、処理が衝突する、など)

まあとはいえ便利で使いやすいのと、Facadeパターンなどと組み合わせるSingletonは処理の見通しもよくなります。
変数の参照が必要なために設計を変更したい、と感じたときは採用を検討してみましょう。
とくに、プレイヤーや敵の情報はどこからでも参照できて問題ないはずです。

グローバルアクセス可能なシングルトンのデザイン

static private LifeCycleManager instance = new LifeCycleManager();     // privateなクラス変数

private LifeCycleManager(){} //privateなコンストラクタ

static public LifeCycleManager Instance => instance; // インスタンスを返す関数

//呼び出されるメンバ関数をstaticにすることで、冗長なアクセスを軽減するテクニックもあります。
//LifeCycleManager.Instance.AddUpdate()が、LifeCycleManager.AddUpdate()で書けます。
static public void AddUpdate()
{
  instance.addUpdate
}
void addUpdate()
{

}

参考にしてみてください。