Singletonパターン

Singleton

生成に関するデザインパターン
システムにクラスのインスタンスが1つのみであることを保証する。
一般的に"グローバルスコープ"からの呼び出しによく使われる。
しかし、"複数アクターに対して責任を持ってしまう"ため、SOLID原則の

単一責任の原則(Single Responsibility Principle) - おっさんの備忘録

に違反する。

// Singletonパターン
public class MySingleton
{
  private static MySingleton? mySingleton;
  
  public int UniqueValue { get; set; }
  
  private MySingleton() {}
  
  public static MySingleton GetInstance() => mySingleton ??= new();
}
// 動作確認
[TestClass]
public class SingletonUT
{
  [TestMethod]
  public void MySingletonUT()
  {
    var mySingleton1 = MySingleton.GetInstance();
    var mySingleton2 = MySingleton.GetInstance();
    Assert.AreEqual(mySingleton1, mySingleton2);
    
    mySingleton1.UniqueValue = 10;
    Assert.AreEqual(10, mySingleton1.UniqueValue);
    Assert.AreEqual(10, mySingleton2.UniqueValue);

    mySingleton2.UniqueValue = 15;
    Assert.AreEqual(15, mySingleton1.UniqueValue);
    Assert.AreEqual(15, mySingleton2.UniqueValue);
  }
}