读《Effective Java》笔记之 第三条:强化单例的Singleton属性

本文探讨了单例模式的多种实现方式,包括使用公有静态工厂方法和私有构造器来确保类只有一个实例。讨论了如何防止反射调用私有构造器及序列化时保证单例性的方法。最后介绍了枚举作为实现单例的最佳实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用公有静态工厂方法来获取实例
  1. 构造器设为私有(私有构造器顺便来的特性:不能有子类)
  2. 如果要防止通过反射调用私有构造器,可以修改构造器,在被要求创建第二个实例时抛出异常
  3. 工厂方法提供了灵活性:如可以控制将单例改为每个线程返回一个实例等等...
  4. 如果要序列化(实现Serializable接口),还需要声明所有实例域都是非持久的(transient),并提供一个readResolve方法。在readResolve方法中返回预先创建的单例。private Object readResolve();
  5. 最好的实现单例的方法是使用只包含一个元素的枚举类型,无偿提供了序列化机制,绝对防止多次实例化,面对复杂的序列化和攻击也保证是单例的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值