单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象。一个最好的办法就是,让类自身负责保存它的唯一实例,这个类可以保证没有其他实例可以被创建,并且他可以提供一个访问该实例的方法。
直接代码:
public class Singleton { //作用:private 私有化 让外部不能访问。static 静态 //让实例对象一直存在程序内存,在程序运行时不被回收 private static Singleton instance; //静态构造函数:让类无法在外部实例化 private Singleton() { } //函数:返回对象的实例,提供类实例的唯一访问点 public static Singleton GetInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }
一个简单的单例模式就这样了,当然在多线程程序中这样是不行的,所有进行修改:
//程序运行时创建一个静态辅助只读的进程辅助对象 用于加锁 private static readonly object syncRoot = new object(); public static Singleton GetInstance2() { //判断Instance是否存在,不存在再加锁处理 if (instance == null) { //加锁 lock (syncRoot) { //第二次判断 是应为 多线程中 可能有在 //对象不存在的情况下 有多个线程已经通过了第一次判断, //在锁处排队等候进入,没有判断将可能产生多个实例 if (instance == null) { instance = new Singleton(); } } } return instance; }
当然了,还有另一种方式,不需要显示的编写线程安全的代码:
//sealed 阻止发生派生,派生可能增加实例 public sealed class Singleton { //在第一次引用类的任何成员时创建实例,公共语言运行库付租处理变量的初始化 private static readonly Singleton instance = new Singleton(); private Singleton() { } public static Singleton GetInstance() { return instance; } }
单例模式就这些内容了。
PS:没啥自己的理解,晕乎乎的,还是不该勉强哦。