Back to Top

プログラムの覚書

Category: デザインパターン

C# シングルトンパターン

アプリケーション内で1つしか無い事を保証する生成方法(Singleton)を記載します。

グローバル変数などアプリケーション内で1つで良い場合があります。その場合にいくつもオブジェクトを作成されては困ります。のでそれを保証する書き方です。(必要性があるかといわれると・・・)

アプリケーションを起動した際の時間は1つで、次回起動するまで変わりません。それを例にします。

シングルトン例

unsafe class GlobalTime
{
    private static GlobalTime _Instance;

    /// <summary>
    /// コンストラクタ
    /// </summary>
    protected GlobalTime()
    {
        _Instance = null;
        _startDateTime = DateTime.Now;
    }

    /// <summary>
    /// インスタンスの取得
    /// </summary>
    /// <returns></returns>
    public static GlobalTime getInstance()
    {
        if (_Instance == null)
        {
            _Instance = new GlobalTime();
        }

        return _Instance;
    }

    /// <summary>
    /// 開始日時の取得
    /// </summary>
    /// <returns></returns>
    public DateTime getStartDateTime()
    {
        return _startDateTime;
    }

    private DateTime _startDateTime;
}

上記ではコンストラクタをprotectedで保護します。のでnewでの生成ができません。

インスタンスは、getInstance()で取得して使います。

呼び出し側

//インスタンスの取得
GlobalTime gt = GlobalTime.getInstance();

//public メソッドの呼び出し
DateTime dt = gt.getStartDateTime();

 

C# プロトタイプパターン

プロトタイプ(Prototype)パターンとは、自分自身のクローン作成する事です。

C#では、ICloneableを実装してClone()を作成することでできます。

また、 コピーには、シャローコピー (Shallow Copy) と、ディープコピー (Deep Copy) の2通りあります。

詳しくは、ICloneableを実装を見てください。