设计模式 3.5 Singleton(单件)-对象创建型模式

 其实我已经写了一篇关于单件模式的随笔了,这里我将再重复一次的对这个模式进行记录。

  1.意图

  保证一个类仅有一个实例,并提供一个访问它的全局访问点

  2.动机

  很明显,我们有时需要一个只有一个实例的类。例如,我们系统中可以有许多打印机,但却只应该有一个打印假脱机(printer spooler)。

  3.适用性

  • 在类只能有一个实例而且客户可以从一个总所周知的访问点访问它时
  • 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展实例事

  4.结构

  

设计模式 3.5 Singleton(单件)-对象创建型模式

  5.参与者

  Singleton --定义一个Instance 操作,允许客户访问它的唯一实例。Instance是一个类操作。可能负责创建它自己的唯一实例

  6.协作  客户只能通过Singleton的Instance操作访问一个Singleton的实例

  7.效果

  • 对唯一实例的受控访问
  • 缩写名空间 Singleton模式是对全局变量的一种改进。它避免了那些存储唯一实例的全局变量污染名空间
  • 预先对操作和表示精化 Singleton类可以有子类,而且用这个扩展类的实例化来配置一个应用是很容易的。你可以用你所需要的类的实例在运行时刻配置应用。
  • 运行可变数目的实例  
  • 比类操作更灵活

  8.实现

  保证一个唯一的实例 将创建这个实例的操作隐藏在一个类从中后面,由它保证只用一个实例被创建。这个操作可以访问保存唯一实例的变量,而且它可以保证合格变量在返回值之前用这个唯一实例初始化。这种方法保证了单件在它首次使用前被创建和使用。

   对于这个模式的实例,不再给出代码,请参看前面的例子。

 下面我将对前面的五种创建型模式进行一下总结:

  总的来说,用一个系统创建的那些对象的类对系统进行参数化有两种常用方法。一种是生成创建对象的类的子类;这对应于使用Factory Method模式。这种方法的主要缺点是,仅为了改变产品类,就可能需要创建一个新的子类。这样的改变可能是级联的。

  另一种对系统进行参数化的方法更多的依赖于对象的复合:定义一个对象负责明确产品对象的类,并将它作为该系统的参数。这是Abstract Factory,Builder,Portotype模式的关键特征。穿件一个新的 负责刹那品对象的“工厂对象”。Abstact Factory 由这个工厂对象产生多个类的对象。Builder由这个工厂对象使用一个相对复杂的协议,逐步创建一个复杂产品。Prototype由该工厂对象通过拷贝原型对象来创建产品对象。

  

你可能感兴趣的:(Singleton)