现在的位置: 首页 > 综合 > 正文

第十三章 单件模式(Singleton Pattern)

2012年12月22日 ⁄ 综合 ⁄ 共 881字 ⁄ 字号 评论关闭
1.意图
单件模式保证应用只有一个全局唯一的实例,并且提供一个访问他的全局访问点。

2.使用场合
当类型只能有一个实例存在,并且可以在全局访问时。这个唯一的实例应该可以通过子类实现扩展,并且用户无须更改代码即可使用。

3.结构
单件模式的结构非常简单,包括防止其他对象创建实例的私有构造函数、保存唯一实例的私有变量和全局访问接口等。

4.效果
单件提供了全局唯一的访问入口,因此易于控制可能放生的冲突。

.NET实现
实现要点:
(1)私有的构造函数防止在外部被实例化。
(2)保存唯一实例的静态的私有变量。
(3)初始化并获得唯一实例的静态方法。

public class CShapeSingleton 
{
  
private static CShapeSingleton mySingleton=null;
  
private CShapeSingleton(){};
  
public static GetCShapeSingleton()
  
{
    
if(mySingleton==null)
    
{
      mySingleton
=new CShapeSingleton();
    }

    
return mySingleton;
  }

}

5.全局变量与单件
能否用一个全局变量来代替单件模式?我们定义一个静态的窗体全局变量,在应用启动时初始化这个变量,然后可以在程序的任何地方使用这个变量。如果我们关闭了这个窗体,会发现将无法打开,因为窗体的实例已经被销毁。唯一的傍法是创建一个新窗体,因为无法知道哪些模块会调用这个窗体,因为在所有可能的地方都要判断这个窗体是否已经被销毁?是否需要重新创建?系统维护量可想而知。
可以看出,单件模式维护了自身的实例化,在使用时是安全的。一个全局对象无法自行维护,也就无法避免重复创建多个实例,系统资源会被大量占用。更糟的是在很多情况下回出现逻辑问题,当这些对象访问相同的资源时,会发生访问冲突。

6.单件与实例类中的静态方法

7.相关模式
(1)工厂模式:一个应用中的工厂对象经常是一个单件。
(2)外观:与其它子系统接口的业务外观对象经常是一个单间。

抱歉!评论已关闭.