C#设计模式学习7——单件模式

单件模式:
主要是为整个系统提供一个全局的访问点,完成一个全局的职责。而其他的对象要依赖于这个职责。
实现单件模式的类要求有且仅有一个实例。

单件模式的实现机制:
1、对类进行实例化的时候,需要采用添加private修饰符的构造函数,不能添加其他非private修饰符的构造函数,也不能没有构造函数

2、利用静态字段和静态方法

class SystemStartup { private static Factory _factory = new Factory(); public static Factory GetFactory() { return this._factory; } }
3、惰性初始化,在第一次调用的时候进行实例化。
主要适用于,没有足够的信息,在特定的时刻无法实例化。例如:调用远程对象实例化时,尚未建立远程连接的情况。
另外使用于,实例化时需要特定资源。例如,建立数据库连接的情况。
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;
    }

  }

}

注意:在系统建模时,要注意识别单件模式。不是所有的只实例化一次的类都可以说是单件模式。
单件模式的目的是,在一个单独的对象实例中,集中了这个对象实例所属类的所有职责或权力。为系统提供一个全局性的访问点。

posted @ 2007-12-27 17:23  芈老头  阅读(669)  评论(0编辑  收藏  举报