美文网首页
《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