【デザインパターン】【GoF】【C#】シングルトーン(Singleton)パターン

Singletonパターン:オブジェクトの生成に関するパターン

 * Singleton : 一つずつ起こること;1個のもの
 * デザインパターンとしては、クラスのインスタンスが1つしか生成されないことを保証する

使いどころ

 * ロガークラス(ログ出力クラス)

 以下のように、マルチスレッド環境下で、インスタンスが2つ生成されてしまうと、ログ出力パスが変わってしまうため、
http://blogs.wankuma.com/masaru/archive/2008/07/24/150168.aspx
 * 画面表示など重い処理を行う場合、一度作成したら、使いまわすために利用する

サンプル

public class SampleSingleton
{
    // ★ポイント1★ privateでstaticなインスタンス
    private static SampleSingleton sampleSingleton;
    public string id;
    public string name;

    public static SampleSingleton GetInstance()
    {
        // ★ポイント2★ 同じ型のインスタンスを返す getInstance() がクラス関数として定義され、
        //        null以外は生成しないようにしている
        if (sampleSingleton == null)
        {
            sampleSingleton = new SampleSingleton();
        }

        return sampleSingleton;
    }
    
    // ★ポイント3★ privateなコンストラクタ
    private SampleSingleton()
    {
        this.id = "0001";
        this.name = "Mike";
    }
}

補足

 * .NETの場合、lockステートメント(以下URL参照のこと)を使うほういいかも。
http://blogs.yahoo.co.jp/dk521123/28718911.html

クラス図

+---------------------------------------+
|           SampleSingleton             |
+---------------------------------------+
| - sampleSingleton : SampleSingleton  |
+---------------------------------------+
| - SampleSingleton() <= コンストラクタ |
| + GetInstance() : SampleSingleton   |
+-------------------------ーー----------+