面向对象设计模式1:Singleton模式

从目的来看
创建型(Creational) 模式:负责对象创建
结构型(Structural) 模式:处理类与对象间的组合
行为型(Behavioral) 模式:类与对象交互中的职责分配

从范围来看
类模式处理类与子类的静态关系
对象模式处理对象间的动态关系

动机(Motivation)
在软件系统中,经常有这样一些特殊的类,必须保证它们在系统工程中只存

在一个实例,才能确保它们的逻辑正确性以及良好的效率。

如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例?

这应该是类设计者的责任,而不是使用者的责任.

意图(Intent)

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

单线程Singleton模式实现:

public calss Singleton
{

   private static Singleton instance;
   private Singleton(){}

   public static Singleton Instance
   {
      get
      {
         if(instance==null)
           {
             instance=new Singleton();
           }
        return instance;
      }
   }
}

Singleton 模式中的实例构造器可以设置为protected以允许子类派生。
Singleton 模式一般不要支持ICloneable接口,因为这会导致多个对象实例

,与Singleton模式的初衷违背。

Singleton 模式一般不要支持序列化,因为这也可能导致多个对象实例,同

样与Singleton模式的初衷违背。

Singleton只考虑到了对象创建的管理,没有考虑对象销毁的要点。

不能应对多线程环境,在多线程环境下,使用Singleton模式仍然有可能得到
Singleton类的多个实例对象。

多线程Singleton 实现

private static volatile Singleton instance=null;
private object lockHelper=new object();
private Singleton(){}
public static Singleton Instance
{
  get
  {
      if(instance==null)
      {
        lock(lockHelper)
         {
             if(instance==null)
             {
                 instance=new Singleton();
             }
          }
      }
      return instance;
   }
}

 

多线程Singleton实现2:
class Singleton
{
 public static readonly Singleton Instance=new Singleton();
 private Singleton(){}
}

class Singleton
{
  public static readonly Singleton instance;
  static Singleton()
  {
    instance=new Singleton();
  }
  private Singleton(){}
}

 

 

posted on 2011-03-15 22:39  曦's Android  阅读(176)  评论(0)    收藏  举报

导航