在论设计模式----单例模式

import java.io.Serializable;

public class Singleton implements Serializable
{
   private Singleton()
   {
	   
   }
   
   private static class SingletonHolder
   {
	   private static final Singleton INSTANCE  = new Singleton();
   }
   
   
   public static Singleton getInstance()
   {
	   return SingletonHolder.INSTANCE;
   }
   
   private Object readResolve()
   {
	   return SingletonHolder.INSTANCE;
   }
}

 

上面这段代码有什么不同?

让我们先回顾下单例模式的俩种形式的优缺点:

懒汉模式:存在对象锁。锁竞争对性能有一定的影响

饿汉模式:一開始就初始化单例对象,假设单例对象初始化时间非常长(大对象),添加类载入的耗时


而上面代码利用内部类,类载入的时候不初始化单例对象,在第一次使用的时候才初始化单例对象。因为内部类的载入机制。有攻克了锁的问题,


说道这里读者已经能够知道内部类的作用,可是还有个不同没有提到呀,多了private方法。

哦。对了。先看看一个測试结果:



       结果为 True,太不可思议了,

        对的,这种方法攻克了序列化破坏单例模式的问题


        遗留:反射能够破坏单例模式


posted @ 2017-04-19 15:17  gccbuaa  阅读(133)  评论(0编辑  收藏  举报