程序员

Builder模式中,为什么必须在对象域而不是builder域中

2017-09-20  本文已影响0人  猴子007

这个问题仅对于构造不可变类有意义,如果构造可变类,放在哪里都无法保障安全。

使用Builder模式构建不可变类ImmutableObj的实例imObj时,应该把字段的检查放在对象域。可以从两个角度分析:

public class ImmutableObj {
  private int[] nums;
  
  private ImmutableObj(int[] nums) {
    this.nums = nums.clone();
    // 完成所有字段的初始化后再检查字段
    checkArgs();
  }
  
  private void checkArgs() {
    if (...illegal...) {
      throw new IllegalArgumentException("Illegal nums ...: " + Arrays.toString(nums));
    }
  }
}

当然,上述表述有些绝对了:如果参数本身就是不可变的,那么任何时候检查都是可以的

PS:参数指Builder实例的成员变量,字段指ImmutableObj的成员变量。参数是相对于ImmutableObj的称法。


本文链接:Builder模式中,为什么必须在对象域而不是builder域中检查参数?
作者:猴子007
出处:https://monkeysayhi.github.io
本文基于 知识共享署名-相同方式共享 4.0 国际许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名及链接。

上一篇下一篇

猜你喜欢

热点阅读