C#设计模式—— 单例模式

来源:互联网 发布:win10禁止自动更新软件 编辑:程序博客网 时间:2024/06/05 19:15

单例模式

什么是单例模式

单例模式就是在一个程序里面只存在一个实例,不允许创建多个实例。

单例模式的优点

单例模式会控制其实例对象的数量,确保访问的唯一性。
单例模式是通过自己创建自己的唯一实例。
单例模式会给其他对象提供一个获取实例的方法。

单例模式代码

 /// <summary>    /// 单例模式    /// </summary>   public class Singleton    {        //定义一个静态变量来保存类的实例        private static Singleton singLeton;        //定义一个私有的构造函数,让外部不能实例化        private Singleton()        {        }        //定义一个访问点,让外部可以进行创建         public static Singleton GetInstance()        {            if (singLeton == null)            {                singLeton = new Singleton();            }            return singLeton;        }    }}

上面这种写法很简单,但是没有考虑线程安全,如果在多线程下面就会出现多个实例化的对象。

    /// <summary>    /// 单例模式    /// </summary>   public class Singleton    {        // 定义一个标识确保线程同步        private static Object ob = new object();        //定义一个静态变量来保存类的实例        private static Singleton singLeton;        //定义一个私有的构造函数,让外部不能实例化        private Singleton()        {        }        //定义一个访问点,让外部可以进行创建         public static Singleton GetInstance()        {            //减少开支,如果已经有实例,这儿进行判断就不用再进入判断            if (singLeton == null)            {                // 当第一个线程运行到这里时,此时会对locker对象 "加锁",                // 当第二个线程运行该方法时,首先检测到locker对象为"加锁"状态,该线程就会挂起等待第一个线程解锁                // lock语句运行完之后(即线程运行完之后)会对该对象"解锁"                // 双重锁定只需要一句判断就可以了                lock (ob)                {                    if (singLeton == null)                    {                        singLeton = new Singleton();                    }                }                singLeton = new Singleton();            }            return singLeton;        }    }}
0 0
原创粉丝点击