浅谈单例模式的几种写法

来源:互联网 发布:泰达网络登录 编辑:程序博客网 时间:2024/06/05 05:51

概述:随着jdk的版本的发展,单例模式的写法也随之增加并逐渐完善。博主从接触java就听到单例模式,闲来无事喜欢看杂七杂八的文章,今天看到枚举单例,突发感想记录下来。总结之,目前单例模式有三种写法。

一、最原始的单例模式写法

归纳起来三个步骤,静态方法、私有构造器、静态常量

public class A {private static final A instance = new A();private A(){}public static A getInstance(){return instance;}}

如此单例模式就设计出来,如果考虑到线程安全的问题,getInstance可以如下写法

public static synchronized  A  getInstance(){return instance;}
第一种写法在序列化、反序列化上会产生多个对象,如此就违背了单例思想

二、改进的单例模式写法

public class B {private static final B instance = new B();private B(){}public static   B  getInstance(){return instance;}public Object readResolve(){return instance;}}

添加readResolve()方法,防止序列化的时候出现多个实例

三、枚举单例模式

枚举单例写法需要jdk的配合,jdk1.5之后才可以这种写法

public enum TestSingleton {INSTANCE;TestSingleton(){}}
这种写法既简洁,又能防止序列化出现多个实例。为三种方法中,博主最推荐的单例模式写法。

至于此种写法的序列化会不会出现多个实例的测试代码,博主就不写了,通过写入、读取的方式可以验证序列化前后的两个实例是同一个,相信大家可以自己写出这样的验证代码。

此文借鉴《effective java》






0 0