逐步构建
场景
- 参数很多并且可选
- 多个参数组合构造
代码
实现
1 | class Product{ |
使用
1 | Product p = new Product.Builder().attr1("foo").attr2("bar").build(); |
内部还可以新增一个辅助方法
1 | public static Builder builder() { |
进一步简化调用为
1 | Product p = Product.builder().attr1("foo").attr2("bar").build(); |
特征
- 目标类private全参构造,并且只有get方法,相当于禁止脱离builder直接构造设值,
- public静态内类Builder
- 也可以单独外部类,但考虑到功能的专属性,更新需要同步,内类关系更紧密
- 静态类只是声明不绑定类实例,不同于静态类成员,每次new建立builder独立,多线程不会共享
- Builder链式设属性
- Builder内建造方法调用目标类的构造函数
优缺点
- 定义代码复杂,目标类属性重复定义
- 使用代码可读性高,避免多参数传递
应用
java.util.Calendar
一分也是爱~
版权声明
This site by Linest is licensed under a Creative Commons BY-NC-ND 4.0 International License.
由Linest创作并维护的博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证。
本文永久链接:http://linest.github.io/2016/11/15/java-pattern-builder/