单例模式
概念:保证一个类只有一个实例,提供访问该实例的全局访问点。
优点:对唯一的实例对象进行受控访问,控制客户怎么访问该对象以及何时访问。
懒汉式单例模式:
只有当该对象被引用时,才会进行实例化。这种情况存在多线程安全性,需要使用双重锁来确保线程的安全。
Class Singleton {
//提供一个静态的私有属性,类型为该类
private static Singleton _instance;
//私有化构造函数
private Singleton() {}
//提供一个访问点
public static Singleton GetInstance(){
if(_instance == null)
_instance = new Singletom();
return _instance;
}
}
多线程下的单例模式:
防止多个线程同时访问并实例化多个对象。
Class Singleton {
//提供一个静态的私有属性,类型为该类
private static Singleton _instance;
//创建一个只读的进程辅助对象
private static readOnly Object obj = new Object();
//私有化构造函数
private Singleton() {}
//提供一个访问点
public static Singleton GetInstance(){
//进行双重加锁,避免每次都进入加锁状态
if(_instance == null){
lock(obj){
if(_instance == null)
_instance = new Singletom();
return _instance;
}
}
}
}
饿汉式单例模式:
静态初始化方法,C#与公共语言运行库提供了一种 “ 静态初始化 ” 方法,这种方法不需要开发人员显示的编写多线程安全性代码,即可决解在多线程环境下它是不安全的问题。
//将该类定义为密封类,放止派生而实例化多个对象
public sealed Class Singleton {
private static readOnly Singleton _instance = new Singleton();
private Singleton(){}
public static Singleton GetInstance(){
return _instance;
}
}