Effective Java
来源:互联网 发布:深圳水务集团网络投诉 编辑:程序博客网 时间:2024/05/24 05:48
读书笔记 仅供参考
Singleton: 仅被实例化一次的类(单例)。通常用来代表本质上唯一的系统组件。
方法一:公有静态 final 成员(Java 1.5 之前便可以使用)
public class Elvis { public static final Elvis INSTANCE = new Elvis(); //私有构造函数 private Elvis(){ ... }}
由于缺少公有的或收保护的构造器,保证了 Elvis 的全局唯一性。
可以使用 AccessibleObject.setAccessible 方法,通过反射机制调用私有构造器。可以修改构造器,在被要求创建第二个实例时抛出异常抵御攻击。
方法二:静态工厂方法(Java 1.5 之前便可以使用)
public class Elvis { private static final Elvis INSTANCE = new Elvis(); private Elvis() { ... } public static Elvis getInstance() { return INSTANCE; }}
方法一的缺陷仍然存在。
优势在于:一,提供了灵活性,在不改变 API 的情况下,可以改变该类是否为 Singleton。二,与泛型有关。
为使得上述两种方法实现的 Singleton 类变为可序列化的,加上 “implements Serializable”是不够的,当当反序列化一个实例时,都会创建一个新的实例,所以要加入以下方法。
private Object readResolve(){ return INSTANCE;}
方法三:单元素枚举(Java 1.5 之后才可以使用)
public enum Elvis { INSTANCE;}
这种方法无偿提供了序列化机制。单元素的枚举类型已经成为实现 Singleton 的最佳方法。
ps: 引申到设计模式的单例模式:(懒汉式单例,饿汉式单例,登记式单例)
别人的博客
阅读全文
0 0
- Effective Java
- Effective Java
- Effective Java
- Effective Java
- effective java
- effective java
- Effective Java
- Effective Java
- effective java
- Effective Java
- Effective Java
- 《Effective Java》
- effective java
- effective java
- Effective Java
- Effective Java
- 《Effective java》
- Effective Java
- Java设计模式(四) 观察者模式
- Spring+SpringMVC+MyBatis+easyUI整合基础篇(三)搭建步骤
- Android7 imx6 Selinux
- 关于const的使用
- 使用nginx+tomcat实现集群
- Effective Java
- JZOJ5439. 【NOIP2017提高A组集训10.31】Calculate 乱搞
- 数组最大连续和 max sum
- hdu1518 Square
- Robberies HDU
- Servlet学习之旅
- datagridview1表一列作为別一个datagridview2表查询条件,单击datagridview1单元格显示datagridview2表数据
- 数据结构-线性表
- APUE-umask&chmod