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;
        }
    }
    
  • 相关阅读:
    win7 安装 memcached
    Nginx执行php显示no input file specified的处理方法
    Nginx配置SSI
    Windows Services
    如何安装mysql服务
    windows下nginx+php简单配置
    Thread Safe(线程安全)和None Thread Safe(NTS,非线程安全)之分
    php常用方法总结
    弹出框以及提示插件lghdialog.js的使用
    webservice的简单示例的实现步骤
  • 原文地址:https://www.cnblogs.com/jianxuanbing/p/5557769.html
Copyright © 2011-2022 走看看