Java23种设计模式【1】----》单例模式

一、原理

保证一个类只有一个对象,并且提供一个全局的访问点

二、应用场景

三、优点

内存占用小 

四、最好拥有的特点

线程安全,调用效率高,懒加载----》推荐使用静态内部类实现

五、常见的五种单例模式

1、饿汉式

调用频繁推荐饿汉式

优点:采用类加载是类初始化的时候创建的,是天然线程安全的模式。

缺点:但如过没有被调用,就浪费了资源,因为对象已经创建了

测试:

2、懒汉式

优点:当创建类开支大时用这种模式,节约资源

缺点:由于synchronized放在了方法上,所以当线程较多时,都得等待,导致效率低下

3、双重检查锁模式

优点:综合了饿汉式和懒汉式

缺点: 

4、静态内部类实现

优点:线程安全,懒加载,效率高

线程安全:采用了内部类加载,类加载是天然线程安全的;instance 是static final的,表示该实例只能创建一次不能被修改,从而保证了线程的安全

懒加载:静态内部类不会随着类初始化时初始化,只有调用时才初始化

效率高:使用时直接调用,不用等待

5、枚举实现

优点:最简单最好用,天然单例,调用效率高

缺点:无延迟加载

测试:

六、实现方式总结

七、如何选用

不需要延时加载:枚举式好于饿汉式

需要延时加载:静态内部类式好于懒汉式

八、如何防止反射和反序列化漏洞

注:对枚举不起作用,因为枚举式天然的单例

测试懒汉式

1、通过反射的方式直接调用私有构造器

攻击代码:

预防代码:

直接抛出异常,不让new

2、通过反序列化的方式构造多个对象

攻击:

预防:

在类中添加如下方法:

九、测试五种单例模式的效率

使用CountDownLatch类检测

检测结果:

懒汉式效率最低。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值