单件模式是开发中非常常用的模式,每次形式又是固定的,所以想是否可以用泛型?一搜发现这个需求还是挺常见的,这里记录一下。原出处已经忘了,所以未标注

    /// <summary>
    /// 单件模式的管理类的泛型模版
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public abstract class BaseInstanceManager<T> where T : class, new()
    {
        public abstract void Reset();

        private static volatile T _instance;
        /// <summary>
        /// 线程安全锁
        /// </summary>
        private static readonly object syslock = new object();

        public static T GetInstance()
        {
            if (_instance == null)
            {
                lock (syslock)
                {
                    if (_instance == null)
                    {
                        _instance = new T();
                    }
                }
            }
            return _instance;
        }
    }

使用方法

public class NetworkTimer:BaseInstanceManager<NetworkTimer>
{
    //如果没有初始化需求,这个可以不写
    public NetworkTimer() { }
}

但是这个方式有个问题,就是他把new函数给暴露出来了,而普通单件模式下,初始函数是private的,也就避免了调用者错误的使用new来创建单件对象。
Last modification:September 2, 2019
如果觉得文章对你有用,请随意赞赏