zoukankan      html  css  js  c++  java
  • 【读书笔记

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

    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破坏了编译时的异常检查。

  • 相关阅读:
    读完此文让你了解各个queue的原理
    借汇编之力窥探String背后的数据结构奥秘
    汇编高手带你玩转字符串,快上车!
    语雀调研
    产品技能一:抽象能力
    我所认知的敏捷开发
    产品经理需要的技能,我有吗?
    孙正义采访:接下来的30年,一切将被重新定义
    5G小白鼠
    goto语句为啥不受待见
  • 原文地址:https://www.cnblogs.com/sei-cxt/p/8718499.html
Copyright © 2011-2022 走看看