一、对象的创建方法
- new Object()
- 工厂模式
- 建造者模式
二、优劣性
2.1 直接创建对象
- 构造方法多个参数时无法明确含义,比如
Object(String name, String phone)
和Object(String name, String addr)
- 当参数大于4个时,需要组合所有参数的构造方法,造成代码太大
2.2 使用工厂模式
可以通过定义方法newInstance
和getInstance
来确定单例还是多例,再则可以通过方法名来区别方法参数
2.3 建造者模式
- 支持链式表达式
- 当多线程环境对共享变量进行初始化操作时,可能将未完全初始化的对象暴露出去造成安全问题,这是可以使用建造者模式来保证对象赋值时一定是初始化完成后。
三、Lombok的@Builder和@Accessors区别
3.1@Builder
@Builder就是基于建造者模式支持链式操作,但很多时候都是构造失血模式的Bean
或者没有共享变量,这时候为了链式操作就新建一个builder
是不是有点大材小用
3.2@Accessors
@Accessors
就可以解决上述的问题,支持链式操作,同时减少多余对象的创建,builder类元信息
又可以减少
四、坑
有的开源反射工具包对对象进行浅拷贝时,获取set
方法元信息时会判断方法返回值是否是void
,这时候@Accessors
就会出现异常
瞬间就没有那么香了呢~
来源:oschina
链接:https://my.oschina.net/teddyIH/blog/4314951