美文网首页
《Effective Java 第三版》读书笔记 - Item

《Effective Java 第三版》读书笔记 - Item

作者: 秋雁上海 | 来源:发表于2020-09-25 15:13 被阅读0次

重叠构造器模式

  • 重叠构造器模式(telescoping constructor pattern)采用前面是必选参数,后面是可选参数的模式
  • 由于 Java 不支持缺省参数,所以会采用多个构造函数,每个构造函数增加一个可选参数的声明方式
public class NutritionFacts {
    ...
    public NutritionFacts(int servingSize, int servings) {
        ...
    }

    public NutritionFacts(int servingSize, int servings, int calories) {
        ...
    }

    public NutritionFacts(int servingSize, int servings, int calories, int fat) {
        ...
    }

    public NutritionFacts(int servingSize, int servings, int calories, int fat, int sodium) {
        ...
    }

    public NutritionFacts(int servingSize, int servings, int calories, int fat, int sodium, int carbohydrate) {
        ...
    }
}
  • 创建实例时,使用一下代码
NutritionFacts cocaCola = new NutritionFacts(240, 8, 100, 0, 35, 27);

重叠构造器模式的缺点

  • 构造函数声明冗长
  • 使用时,代码不直观,不容易理解

JavaBean 模式

  • 空构造函数
  • 使用 set 系列方法来设置

JavaBean 模式的缺点

  • 字段的设置是随机顺序的,无法保持一个统一的内部状态
  • 无法事先不可变性质的类,需要额外的努力来实现线程安全

Builder 模式 (推荐)

  • 源自设计模式的 Builder pattern,但不尽相同
  • 使用代码
NutritionFacts cocaCola = new NutritionFacts.Builder(240, 8)
            .calories(100)
            .sodium(35)
            .carbohydrate(27)
            .build();
  • 在生成对象时,可统一检查参数的有效性(build 方法中)
  • 支持类继承关系和层次结构(见原书的例子,有更详尽的说明,如递归类型参数)
  • 比之 JavaBean 模式,更加安全
  • 但是,也更加重一些,如果注重极端性能,可考虑优化

相关文章

网友评论

      本文标题:《Effective Java 第三版》读书笔记 - Item

      本文链接:https://www.haomeiwen.com/subject/dazxuktx.html