• 【读书笔记


    类有多个可选参数的解决方案:

    1. 重叠构造器模式可行,但是当有许多参数的时候,客户端代码会很难编写,并且仍然较难以阅读。

    2. JavaBeans模式,调用一个无参构造器来创造对象,然后调用setter方法来设置每个必要的参数,以及每个相关的可选参数。

    缺点:构造过程被分到了几个调用中,在构造过程中JavaBean可能处于不一致的状态。阻止了把类做成不可变的可能,需要程序员确保线程安全。

    3. Builder模式,模拟了具名的可选参数。

    模式
    重叠构造器 写法最简单 多参数时候难读、难写、难用
    JavaBeans 创建实例简单 构造过程可能不一致
    Builder

    多参数时候易写、易读

    构造过程一致

    创建构建器有开销


     

    // Builder模式示例
    public class NutritionFacts {
        private final int servingSize; // 必选参数
        private final int servings; // 必选参数
        private final int fat; // 可选参数
        private final int sodium; // 可选参数
        
        public static class Builder {
            private final int servingSize;
            private final int servings;
            private int fat = 0;
            private int sodium = 0;
            
            public Builder(int servingSize, int servings) {
                this.servingSize = servingSize;
                this.servings = servings;
            }
            
            public Builder fat(int val) {
                fat = val;
                return this;
            }
            
            public Builder sodium(int val) {
                sodium = val;
                return this;
            }
            
            public NutritionFacts build() {
                return new NutritionFacts(this);
            }
        }
        
        private NutritionFacts(Builder builder) {
            servingSize = builder.servingSize;
            servings = builder.servings;
            fat = builder.fat;
            sodium = builder.sodium;
        }
    }
    // 调用
    NutritionFacts coca = new NutritionFacts.Builder(240, 8).fat(5).build();

    Java中传统的抽象工厂实现是Class对象,用newInstance方法充当build方法的一部分。然而newInstance方法总是企图调用类的无参构造器,但是有的类没有无参构造器,这时也不会收到编译时错误。Class.newInstance破坏了编译时的异常检查。

  • 相关阅读:
    香港的困境
    美国的制度
    媒体行业
    张首晟生前最著名演讲:这几句话可以总结人类所有知识
    印度的发展
    中国互联网发展解读
    cnblogs博客使用LaTeX公式
    Stanford CS229 Machine Learning by Andrew Ng
    强化学习在业界的实际应用
    AUC计算方法
  • 原文地址:https://www.cnblogs.com/sei-cxt/p/8718499.html
Copyright © 2020-2023  润新知