用私有构造器或者枚举类型强化Singleton属性
概述
Singleton指仅仅被实例化一次的类。
实现方式
在jsk1.5之前,实现Singleton的两种方式都把构造函数声明为private:
- 公有静态成员是一个final域
1 | public class Elvis { |
但这种方法存在一个缺点,客户端可以通过反射来生成第二个实例,要避免这种弊端,可以在创建第二个对象的时候抛出异常
- 公有成员是一个静态工厂方法
1 | public class Elvis { |
jdk1.5发布之后,可以编写一个包含单个元素的枚举类型:
1 | enum Elvis { |