C#设计模式学习7——单件模式
单件模式:
主要是为整个系统提供一个全局的访问点,完成一个全局的职责。而其他的对象要依赖于这个职责。
实现单件模式的类要求有且仅有一个实例。
单件模式的实现机制:
1、对类进行实例化的时候,需要采用添加private修饰符的构造函数,不能添加其他非private修饰符的构造函数,也不能没有构造函数
2、利用静态字段和静态方法
|
主要适用于,没有足够的信息,在特定的时刻无法实例化。例如:调用远程对象实例化时,尚未建立远程连接的情况。
另外使用于,实例化时需要特定资源。例如,建立数据库连接的情况。
class SystemStartup
{
private static Factory _factory;
public static Factory GetFactory()
{
if(this._factory == null)
{
this._factory = new Factory();
}
return this._factory;
}
}
4、多线程环境里的初始化
在多线程系统中,对实现单件模式的类的实例化,必须通过加锁机制,为构造函数加上互斥锁,从而实现仅对对象实例化一次。
class SystemStartup
{
private static Factory _factory;
private static object _lock = typeof(Factory);
public static Factory GetFactory()
{
lock(this._lock)
{
if(this._factory == null)
{
this._factory = new Factory();
}
return this._factory;
}
}
}
注意:在系统建模时,要注意识别单件模式。不是所有的只实例化一次的类都可以说是单件模式。
单件模式的目的是,在一个单独的对象实例中,集中了这个对象实例所属类的所有职责或权力。为系统提供一个全局性的访问点。
Difficulty of making decision depends on what to lose not gain