前言
自己java编程已有两年,自己也写过一些轮子,也在工作中针对自己以前写的代码重构过,但是距离那些优秀的类库总有一些差距,最近在看 Effective Java 第三版,书中总结甚为精辟,遂在阅读过程中逐条写下笔记,以指导自己更加有效的使用 java 编程语言及基本类库,涵盖部分jdk 7,8,9 的新特性
目的
Enforce the singleton property with a private constructor or an enum type
用私有构造器或者枚举类型强化Singleton属性
正文
利用枚举类型实现单例-天然的防止反射和反序列化调用
1 | public enum SingletonWithEnum { |
这里貌似没有提供私有构造,其实在enum内部实现中隐藏了私有构造
1 | 枚举类实现其实省略了private类型的构造函数 |
推荐的写法时面向接口
1 | public interface MySingleton { |
1 | public enum MySingletonImpl implements MySingleton { |
静态内部类实现单例
1 | public class Singleton { |
解决序列化和反射漏洞需如下修改
1 | public class Singleton2 implements Serializable { |
如何选用:
-单例对象 占用资源少,不需要延时加载,枚举 好于 饿汉
-单例对象 占用资源多,需要延时加载,静态内部类 好于 懒汉式
参考资料
https://blog.csdn.net/qq_27093465/article/details/52180865 Java 枚举(enum) 详解7种常见的用法
https://www.jianshu.com/p/4e8ca4e2af6c Java 单例模式的两种高效写法