遇到多构造器时,使用构建器(2)

一、静态工厂和构造器共同缺点:安全

  • 不能很好的扩展到大量可选参数

二、重叠构造器模式能够部分解决上述问题,但遇到参数 太多 会使得客户端代码难以编写、阅读函数

  • 一长串类型相同的参数,会致使微妙的错误
  • 若有两个点到顺序,编译器不报错,运行时报错,调试难度增长

三、简化构造函数,采用setter方法:性能

  • 这种模式 JavaBean 构造过程状态不一致,调试更加困难
  • 阻止了类作成 不可变类的可能<15条>
  • 保证线程安全较难

四、Builder(构建器)模式:ui

  • 保证状态一致
  • 可读性好

客户端利用全部参数调用构建器,相似setter方法设置相关参数:线程

  • 客户端能够调用无参构造方法,生成不可变对象
  • Builder 是构建类的静态成员类<22条>

构建该类:调试

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

实例化外层类时,将builder的这些参数拷贝过去:对象

  • 此时依然能够在构建类中,检验参数的合法性
  • 不合法,抛出 IllegalStateException 异常
  • 也能够在 setter 方法中检验,这样不用等到实例化才报错

五、Builder模式灵活性编译器

  • 能够用来建立多个对象
  • builder 的参数能够在建立时调整,随对象改变
  • 也能够自动填充某些域

六、设置了参数的 Builder 是一个很好的 抽象工厂it

  • 举例以下(有限制的通配符)构建Tree:

Class.newInstance() 破坏了编译时的异常检查io

  • Builder弥补了该不足
  • newInstance老是企图调用类的无参构造器

七、Builder模式不足:

  • 建立对象前,先建立构建器,性能有些许损耗
  • Builder模式比重叠构造器更冗长,故不少不少参数时才使用

END:

  • 若是类包含多个参数,构建器Builder是不错的选择
  • 特别是大多数参数是可选的时候
  • 构建器比重叠构造器 易于阅读
  • 构建器比JavaBeans更加安全
相关文章
相关标签/搜索