Effect Java 学习笔记

第一条、静态工厂替代构造器

1.更高的可读性,可命名。

2.可以控制对象的数量,统一入口生成,单例、对象重用

3.获取对象更加灵活,可以返回对象的所有子类

  通过静态类暴露API,可以隐藏API实现类,使API更加的简洁(Collections)

  服务提供者框架,通过服务访问API获取服务对象,配合提供者注册API可以灵活替换不同的实现,从而实现了用户以及服务访问API和具体实现的解耦。

4.参数化使代码更加简洁,新版jdk已经实现了类型推导

第二条、遇到多个构造器参数时要考虑使用构造器

1.重叠构造器,调用多参构造器初始化虽然代码简洁但不易懂,没有可读性,而且当参数数量增加时,构造器难以维护,调用处也容易出错,需要自己核对参数顺序以及数量。

2.Javabeans模式,解决了可读性问题但是对象初始化被拆分,没有原子性,无法满足多线程情况。

3.Builder模式,通过增加builder对象添加调用参数解决了可读性问题,再通过builder内部调用目标对象构造方法实例化对象保证了原子性

扫描二维码关注公众号,回复: 2840698 查看本文章

  tip:可以在builder中做参数校验,public interface Builder<T>{public T builder();}了解一下

第三条、用私有构造器或者美剧强化Singleton属性

1.工厂方法实现单例的好处在于提供了灵活性,可以控制对象的返回,控制对象是唯一。

2.序列化,单例模式在这里有个坑,反序列化的时候默认会new 一个对象,破坏单例,可以增加private Object ReadResolve(return INSTANCE;)避免这种情况,java在序列化时会检查对象中是否实现这个方法,如果有,则会在序列化时做特殊处理,并在反序列化时通过调用该方法获取对象,从而保证对象唯一。

  tip:通过单元素枚举可以实现一个相对完美的单例

猜你喜欢

转载自www.cnblogs.com/jiangjil/p/9498311.html