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;
        }
    }
    
  • 相关阅读:
    INode满的处理方法
    分布式转码集群思路
    FreeBSD Set a Default Route / Gateway
    ssh遇到port 22:No route to host问题的解决方法
    debian 开启SSH
    virsh 查看信息
    virsh console配置
    virsh console hangs at the escape character “^]”
    virt-install命令---详解
    kmv 学习笔记 工具
  • 原文地址:https://www.cnblogs.com/jianxuanbing/p/5557769.html
Copyright © 2011-2022 走看看