单例模式

[ Singleton ]

保证一个类仅有一个实例 , 并提供一个访问它的全局访问点 。 类的本身负责保存它的唯一实例 , 并保证没有其他实例可以被创建 。

Singleton模式是限制而不是改进类的创建。
Singleton类中的实例构造器可以设置为Protected以允许子类派生。 但是不能为 public , 禁止在类的外部使用 new 关键字创建实例 。
Singleton模式一般不要支持Icloneable接口,因为这可能导致多个对象实例,与Singleton模式的初衷违背。
Singleton模式一般不要支持序列化,这也有可能导致多个对象实例,这也与Singleton模式的初衷违背。
Singleton只考虑了对象创建的管理,没有考虑到销毁的管理,就支持垃圾回收的平台和对象的开销来讲,我们一般没必要对其销毁进行特殊的管理。
理解和扩展Singleton模式的核心是“如何控制用户使用new对一个类的构造器的任意调用”。
可以很简单的修改一个Singleton,使它有少数几个实例,这样做是允许的而且是有意义的。



源码 :

class Singleton
{
  private Singleton(){}; //显示的指定默认构造函数的访问级别 , 禁止在类的外部使用 new 关键字来创建类的实例 。

 
 private static Singleton slton = null; //声明一个类本身对象的引用 。

  1 .不考虑线程安全
  public static Singleton Instance()
  {
    if(slton==null)
    {
      slton = new Singleton();
    }
    return slton;
  }


  2 .考虑线程安全
  private static readonly object obj = new object();
  public static Singleton Instance()
  {
    if(slton==null)
    {
      lock(obj)
      {
        if(slton==null)
        {
          slton = new Singleton();
        }
      }
    }
    return slton;
  }


  3 . NET 特有
  public static readonly Singleton slton = new Singleton(); 静态的构造函数 , 直接可以在 readonly 内部实现了线程安全

 

}

posted on 2012-02-21 13:11  多个马甲  阅读(145)  评论(0编辑  收藏  举报