一、静态工厂和构造器共同缺点:安全
二、重叠构造器模式能够部分解决上述问题,但遇到参数 太多 会使得客户端代码难以编写、阅读函数
- 一长串类型相同的参数,会致使微妙的错误
- 若有两个点到顺序,编译器不报错,运行时报错,调试难度增长
三、简化构造函数,采用setter方法:性能
- 这种模式 JavaBean 构造过程状态不一致,调试更加困难
- 阻止了类作成 不可变类的可能<15条>
- 保证线程安全较难

四、Builder(构建器)模式:ui
客户端利用全部参数调用构建器,相似setter方法设置相关参数:线程
- 客户端能够调用无参构造方法,生成不可变对象
- Builder 是构建类的静态成员类<22条>

构建该类:调试
- 注意这里 new NutritionFacts.Builder(240,8) 实例化的是内部静态类Builder
- NutritionFacts类在最后的build()方法内实例化的
- 因此 NutritionFacts 类是不可变类没问题

实例化外层类时,将builder的这些参数拷贝过去:对象
- 此时依然能够在构建类中,检验参数的合法性
- 不合法,抛出 IllegalStateException 异常
- 也能够在 setter 方法中检验,这样不用等到实例化才报错

五、Builder模式灵活性编译器
- 能够用来建立多个对象
- builder 的参数能够在建立时调整,随对象改变
- 也能够自动填充某些域
六、设置了参数的 Builder 是一个很好的 抽象工厂it


Class.newInstance() 破坏了编译时的异常检查io
- Builder弥补了该不足
- newInstance老是企图调用类的无参构造器
七、Builder模式不足:
- 建立对象前,先建立构建器,性能有些许损耗
- Builder模式比重叠构造器更冗长,故不少不少参数时才使用
END:
- 若是类包含多个参数,构建器Builder是不错的选择
- 特别是大多数参数是可选的时候
- 构建器比重叠构造器 易于阅读
- 构建器比JavaBeans更加安全