单例模式 java-为何使用单例模式的范式?(stateless)??
发布时间:2023-06-20 22:15 浏览次数:次 作者:佚名
为何使用单例模式
如果对象是无状态的(stateless),如一个函数单例模式 java,或者在设计上有内在的唯一性,我们倾向于使用单例模式来确保在应用范围内只有一个实例。单例模式也有其不好的一面,对测试来说如果不是基于接口(interface)可能不大方便,因为大部分的测试框架依赖于继承(inheritance)和多态(polymorphism)单例模式 java,单例模式难以继承,并且静态的方法对如mockito等框架难以注入假的(fake)对象。
单例模式的范式
1. 通过公开唯一的字段暴露实例
使用这种方法的好处是:
2. 通过静态方法暴露实例
使用这种方法的好处是:
注意第一和第二个方法,都没有办法阻止通过反射的形式新建出一个实例。
此外,如果要使用原生的java serialization机制,那么注意不仅仅是"implements Serializable"。还需要加上如下代码避免返回新的反序列化对象。
3. 通过Enum实现单例
尽管看上去不太自然,但天然支持java 序列化(serialization)机制,确保了唯一实例的特性,很好地阻挡了基于反射破坏单实例的行为。当然,它也有缺点,无法继承一个非Enum的类。