追蹤
兔子也會的遊戲設計
關於部落格
一個推廣XNA與OGRE的園地,當然還有其他關於遊戲設計的主題,歡迎有興趣的同好交流指教
  • 104790

    累積人氣

  • 1

    今日人氣

    0

    追蹤人氣

獨體模式


在C#中,不用考慮結束時的記憶體釋放問題,所以比C++寫起來方便多了,以下是一些實現的方法:

public sealed class Singleton
{
    //宣告一個Static instance
    static Singleton instance = null;
    //重點在這裡 把建構子設成私有 以防被new
    private Singleton()
    {
        // 這裡可以初始化自己的東西
    }


    //instance屬性 在這裡真正取得一個實體
    public static Singleton Instance
    {
        get
        {
            if (instance == null)
            {
                instance = new Singleton();
            }
            return instance;
        }
    }
}

上面這個方法有在多執行緒環境下是不安全的 需要其他的互斥機制 如mutex、lock等
但優點是可以延遲實體化 也就是在真正需要的時候才會new instance
下面是改良版 

public sealed class Singleton
{
    static readonly Singleton instance = new Singleton();
    private static Singleton()
    { }
    private Singleton() { }
    public static Singleton Instance
    {
        get
        {          //在此回傳實體
            return instance;
        }
    }
}

上面這個方法是執行緒安全的,但還有些缺點,下面是更妙的辦法









public sealed class Singleton
{
    Singleton()
    {
    }
    public static Singleton Instance
    {
        get
        {
            return Nested.instance;
        }
    }
    class Nested
    {
        private static Nested()
        { }
        internal static readonly Singleton instance = new Singleton();
    }
}



不了解static建構子的人可以參考這個網頁
http://msdn2.microsoft.com/en-us/library/k9x6w0hc(vs.80).aspx
相簿設定
標籤設定
相簿狀態