设计模式之单例详解

        单例模式是一种常见的设计模式,我们也知道单例模式有如下几种实现形式:

     

        1.最简单的实现---饿汉式

            
         注:如上标红所示,写一个单例(不管什么形式),主要注意点如下几点:

            1.成员变量 single 要声明成静态的(static),因为需要在静态方法getInstance()中访问。

            2.构造方法要声明成私有,不然如何保证单例

            3.getInstance()要声明成 public static的;

         该种方式不存在线程安全的问题,其是线程安全的。

         2.性能优化(lazy load)——懒汉式

         

         上面的方式虽然简单,但是是基于classloader加载的,其在该类第一次加载进内存时就会初始化单例对象。这样,无论该对象是否被使用,都会创建一个single对象。

         为了解决这个问题,就有下如下的方式:

         

           但该单例是非线程安全的;因此,解决线程安全的问题也很简单,就是加锁,如下:

            3. 懒汉式——线程安全(1)

           
      
               
4. 懒汉式——线程安全(2):效率更高

              

 

           但是上面的单例都有其缺陷:当反序列化和使用java的反射机制时,单例无法得到保证,那么,解决该问题,我们可以使用Enum(枚举)。

           5枚举实现

           

            
这种方式是Effective Java作者Josh Bloch 提倡的方式,它不仅能避免多线程同步问题,而且还能防止反序列化和反射机制重新创建新的对象,不过,JDK1.5中才加入enum特性, 这种方式只能在1.5之后使用。

猜你喜欢

转载自xhmj12.iteye.com/blog/2197046