设计模式之单例(Singleton)模式(一)

老杨叔叔 2012-06-01

一、什么是模式?软件的模式最初起源于建筑学的模式,对于java设计师而且,java源代码是软件的基本组成部分,而这些源代码汇聚的"形",其中有些“形”是反复出现的,构成了对一些典型的问题的典型解决方案,于是就有人把它总结为模式。为了便于相互交流和沟通,人们就给这些形定义了一个可以区别的名字。

二、根据“形”的尺度模式可以分成:“代码模式”,也就是有语句组成的“形”;“设计模式”,也就是有类和对象组成的“形”;“架构模式”,也就是由大尺度的构件组成的“形”。

三、什么是单例模式?单例模式是确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。

要点:一,该类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。

<1>.饿汉式

  
/**饿汉式*/
       public class Singleton
       {
          private static final Singleton _instance = new Singleton();
          /**私有的默认构造*/
          private Singleton(){
          }
          /**静态工厂方法*/
          public static Singleton getInstance()
          {
              return _instance;
          }
       }

当Singleton这个类被加载是,静态变量_instance会被初始化,此时类的私有构造汇被调用。Singleton的唯一实例就被创建了。Java语言中单例类的一个最重要的特点是类的构造是私有的,从而避免了外界利用构造直接创建出任意多的实例。由于构造是私有的,由此此类不能被继承。

<2>.懒汉式

  与饿汉式相同的是,类的构造是私有的。与饿汉式不同的是,懒汉式单例模式在第一次被引用时将自己实例化。如果加载器是静态的,那么懒汉式单例被加载是不会将自己实例化。代码如下:
/**懒汉式*/
 public class Singleton
 {
   private static Singleton
       _instance = null;
   /**私有的默认构造*/
   private Singleton(){}
   /**静态工厂方法,返回唯一实例*/
   public synchronized static Singleton getInstance()
   {
          if(_instance==null)
          {
             _instance = new Singleton();
          }
          return _instance;
   }
 }

相关推荐