设计模式-单例模式
作者:互联网
单例模式:简单地说就是一个 实例即一个对象,全局只用这一个对象。
如何保证一个对象呐?
私有的构造函数,保证外界不能直接new 一个对象,那么就保证了单一性;
但是只是不让外界new,但是第一个对象怎么来呐?
那就要在单例中创建一个方法,以用来创造这第一个对象,其他地方想要用,直接调用这个方法即可!
class Singleton { //单例模式结构: private static Singleton instance; // 私有构造方法Singleton(),外界不能使用new关键字来创建此类的实例了。 private Singleton() { } //方法GetInstance(), 此方法是本类实例的唯一全局访问点。 public static Singleton GetInstance() { //如实例不存在,则New一个新实例,否则返回已有实例 if (instance == null) { instance = new Singleton(); } return instance; } }
==========以上就是 单例模式的基本 结构
如果在多线程的情况下,单例模式会不会被破坏,创造出多个实例。答案是会的,会出现这种情况,那么如何补救?就需要 加锁了
class Singleton { //单例模式结构: private static Singleton instance; // 私有构造方法Singleton(),外界不能使用new关键字来创建此类的实例了。 private static readonly object _object = new object();//创建锁 private Singleton() { } //方法GetInstance(), 此方法是本类实例的唯一全局访问点。 public static Singleton GetInstance() { //如实例不存在,则New一个新实例,否则返回已有实例 if (instance == null) { //现在还不能直接创建,要加锁,让线程一个个进来 lock (_object) { //一个个进来如果还是 null 的话,就说明确实没有创建实例了 if (instance==null) { instance = new Singleton(); } } } return instance; } }
加上锁的话,就更能保证单例模式的运行了
============题外话:什么时候使用 锁?=> 当多个线程调用同一个方法时,会需要锁 阻塞一下线程
标签:Singleton,模式,instance,实例,static,单例,new,设计模式 来源: https://www.cnblogs.com/messi-10/p/16601974.html