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

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

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


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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值