C#设计模式之单例模式实例讲解

2019-12-26 12:14:14丽君

三、对象生存期

不能解决删除单个对象的问题。在提供内存管理的语言中(例如基于.NET Framework的语言),只有单例类能够导致实例被取消分配,因为它包含对该实例的私有引用。在某些语言中(如 C++),其他类可以删除对象实例,但这样会导致单例类中出现悬浮引用。

 

复制代码
/// <summary>
    /// 单例模式
    /// </summary>
    public class Singleton
    {
        // 定义一个静态变量来保存类的实例
        private static Singleton mySingleton;

 

 

        // 定义私有构造函数,使外界不能创建该类实例
        private Singleton()
        {
        }

        //定义公有方法提供一个全局访问点。
        public static Singleton GetInstance()
        {
            //这里的lock其实使用的原理可以用一个词语来概括“互斥”这个概念也是操作系统的精髓
            //其实就是当一个进程进来访问的时候,其他进程便先挂起状态
            if (mySingleton == null)
            {
                mySingleton = new Singleton();
            }
            return mySingleton;
        }
    }

 

上面的单例模式的实现是有问题的,当多个用户或者方法同时访问的时候,便会出现多个用户同时拿到了mySingleton==null的结果,这个明显不是我们想要的,因此,我们应该通过一个锁来互斥这个方法,当很多线程同时访问的时候,只允许一个线程进入到代码中执行,而其他的便只能处于挂起的状态。