单例模式

2017-06-29  本文已影响0人  小小青蛙不怕风吹雨打

单例模式,最简单的模式

  1. 提供方便的全局访问入口
  2. 提供一个简单的对象管理

注意!!!

  1. 容易导致代码耦合严重
  2. 基本是不能用于多线程的程序的,需要加锁
  3. 多组单例可以通过修改GetInstance()的代码实现

《游戏编程模式》里把单例模式拎出来批判了一番。
心中默默记下,尽量不要使用单例模式。
实际发现,要是不用单例模式,好像都不会写代码了。
总不能想lua的源码一样,每个函数都加个环境参数state吧。

c#实现

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访问就好了,十分方便
上一篇下一篇

猜你喜欢

热点阅读