定义
确保一个类在程序中只有一个实例并提供一个访问它的全局访问点。
类图
代码
1 public class SingleTon 2 { 3 private static object mLock = new object(); 4 private SingleTon() 5 { } 6 private static SingleTon instance; 7 public static SingleTon GetInstance() 8 { 9 if (instance == null) 10 { 11 lock (mLock) 12 { 13 if (instance == null) 14 { 15 instance = new SingleTon(); 16 } 17 } 18 } 19 return instance; 20 21 } 22 }
总结
曾经非常纠结,为什么不用静态的类来代替单例。后来才知道,静态不能保证程序中只有一个这个类的实例,甚至可能会新建,所以它并不能替换。
也曾考虑为什么在获取实例处要判断两次if (instance == null)--这个则是考虑两个线程同时到达时锁前锁后重复创建的严谨性与正确性。
关于恶汉模式(private static SingleTon instance=new SingleTon();),定义变量时初始化,则在类第一次被访问时触发初始化,以后就可以实习单例的重复使用了,这样也是可行的。