單例模式

單例模式,最簡單的模式

  1. 提供方便的全局訪問入口
  2. 提供一個簡單的對象管理

注意!??!

  1. 容易導致代碼耦合嚴重
  2. 基本是不能用于多線程的程序的,需要加鎖
  3. 多組單例可以通過修改GetInstance()的代碼實現(xiàn)

《游戲編程模式》里把單例模式拎出來批判了一番。
心中默默記下,盡量不要使用單例模式。
實際發(fā)現(xiàn),要是不用單例模式,好像都不會寫代碼了。
總不能想lua的源碼一樣,每個函數(shù)都加個環(huán)境參數(shù)state吧。

c#實現(xiàn)

namespace XUtils
{
    public abstract class XBaseSingleton
    {
        public abstract bool Init();
        public abstract void Uninit();
    }

    /// <summary>
    /// 單例模版
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public abstract class XSingleton<T>: XBaseSingleton where T: new()
    {
        // add restriction
        protected XSingleton()
        {
            if(_instance != null)
            {
                throw new Exception(_instance.ToString() + @" can not be created again.");
            }
            Init();
        }

        private static readonly T _instance = new T();

        public static T singleton
        {
            get
            {
                return _instance;
            }
        }

        public override bool Init() { return true; }
        public override void Uninit() { }
    }
}

// use
class TestSingleton:XSingleton<TestSingleton>
{
}

// 之后用 TestSingleton.singleton訪問就好了,十分方便
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容