首页 > 代码库 > 在论设计模式----单例模式

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

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,太不可思议了,

        对的,这个方法解决了序列化破坏单例模式的问题


        遗留:反射可以破坏单例模式



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