zoukankan      html  css  js  c++  java
  • 通用单例模式

    单例模式

    单例模式是许多开发人员最先接触到的模式之一,可以认为就是一个全局变量。它的初始化过程无非就是一开始就是创建一个实例,或者延迟初始化等需要用到的时候创建一个实例。这里需要注意的是多线程情况下创建一个实例,通常需要加锁(Lock)来解决问题。这里我们可以利用C#的系统函数Interlocked.CompareExchange来实现。

    1 常用单例模式

    internal class SingletonOne
    {
        private static SingletonOne _singleton;
        private SingletonOne(){}
        public static SingletonOne Instance
        {
            get
            {
                if(_singleton==null)
                {
                    Interlocked.CompareExchange(ref _singleton,new SingletonOne(),null);
                }
                return _singleton;
            }
        }
    }
    

    2 通用单例模式

    /// <summary>
    /// 通用单例模式
    /// </summary>
    /// <typeparam name="T">泛型</typeparam>
    public class Singleton<T>
    {
        static Dictionary<Type, object> _lockers = new Dictionary<Type, object>();
        static T _instance;
        /// <summary>
        /// 获取对象实例
        /// </summary>
        /// <param name="parameters">参数</param>
        /// <returns></returns>
        public static T GetInstance(params object[] parameters)
        {
            if (_instance == null)
            {
                Type type = typeof(T);
                var locker = _lockers.GetOrDefault(type);
                if (locker == null)
                {
                    lock (_lockers)
                    {
                        locker = _lockers.Get(type, x => new object());
                    }
                }
                lock (locker)
                {
                    if (_instance == null)
                    {
                        var cons =
                            type.GetConstructors(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public)
                                .FirstOrDefault();
                        _instance = (T)cons.Invoke(parameters);
                    }
                }
            }
            return _instance;
        }
    }
    
  • 相关阅读:
    Sql Server 2008卸载后再次安装一直报错
    listbox 报错 Cannot have multiple items selected when the SelectionMode is Single.
    Sql Server 2008修改Sa密码
    学习正则表达式
    Sql Server 查询第30条数据到第40条记录数
    Sql Server 复制表
    Sql 常见面试题
    Sql Server 简单查询 异步服务器更新语句
    jQuery stop()用法以及案例展示
    CSS3打造不断旋转的CD封面
  • 原文地址:https://www.cnblogs.com/jianxuanbing/p/5557769.html
Copyright © 2011-2022 走看看