おーみんブログ

C#, ASP.NET Core, Unityが大好きです。

C#でSingletonパターンを体験してみた。

はじめに

GoFデザインパターンの1つであるSingletonパターンを体験してみました。

Singletonパターンとは

Singletonパターンを用いると特定のクラスのインスタンスを1つだけ生成するということが可能になります。 1つのインスタンスだけを使いまわしたいときに使います。 用途としてはログ機能やキャッシュ機能などが挙げられます。

サンプルコード

Singletonクラスはフィールドで初期化し、GetInstanceメソッド経由で取得します。 Singletonクラスを外部でnewされないようにコンストラクタのアクセス修飾子はprivateにします。

public class Program
{
    static void Main(string[] args)
    {
        var instance1 = Singleton.GetInstance();
        var instance2 = Singleton.GetInstance();

        Console.WriteLine(instance1 == instance2); // <-- True が出力される
    }
}

public sealed class Singleton
{
    private static readonly Singleton _singleton = new();

    public static Singleton GetInstance() => _singleton;
    private Singleton() { }
}

おわりに

なるほど。確かにこれで何度呼び出しても同じインスタンスが返却されますね。 使いどころは色々ありそうなので実際に利用できそうなときは使っていこうと思います。