遇到多个构造器参数采用构建器 《Effective Java》读书笔记

原创 2018年04月16日 21:21:28

常见构造器写法有三种,重叠构造器,JavaBean,Builder模式。本文记录下三种方式的优劣

1.重叠构造器

优点:脑子里最先想到,最简单。
缺点:代码量大,可读性低,且参数如果输入错误,可能该错误不会报出。

代码

public class NutritionFacts{
    private final int servingSize;
    private final int servings;
    private final int calories;
    private final int fat;
    private final int sodium;
    private final int carbohydrate;
    public NutritionFacts(int servingSize,int servings){
        this(servingSize,servings,0);
    }
    public NutritionFacts(int servingSize,int servings,int calories){
        this(servingSize,servings,calories,0);
    }
    public NutritionFacts(int servingSize,int servings,int calories,int fat){
        this(servingSize,servings,calories,fat,0);
    }
    public NutritionFacts(int servingSize,int servings,int calories,int fat,int sodium){
        this(servingSize,servings,calories,fat,sodium,0);
    }
    public NutritionFacts(int servingSize,int servings,int calories,int fat,int sodium,int carbohydrate){
        this.servingSize = servingSize;
        this.servings = servings;
        this.calories = calories;
        this.fat = fat;
        this.sodium = sodium;
        this.carbohydrate = carbohydrate;
    }
}

2.JavaBean模式

优点:代码可读性搞,代码量较少
缺点:线性不安全

代码

public class NutritionFacts{
    private int servingSize;
    private int servings;
    private int calories;
    private int fat;
    private int sodium;
    private int carbohydrate;
    public NutritionFacts(){};
    public void setServingSize(int var){this.servingSize = var;}
    public void setServings(int var){this.servings = var;}
    public void setCalories(int var){this.calories = var;}
    public void setFat(int var){this.fat = var;}
    public void setSodium(int var){this.sodium = var;}
    public void setCarbohydrate(int var){this.carbohydrate = var;}
}

3.Builder模式

优势:可读性高,利于开发,代码量较少,且线性安全
缺点:增加性能开销

public class NutritionFacts{
    private final int servings;
    private final int servingSize;
    private final int calories;
    private final int fat;
    private final int sodium;
    private final int carbohydrate;
    public static class Builder{
        private int servings;
        private int servingSize;

        private int calories = 0;
        private int fat = 0;
        private int sodium = 0;
        private int carbohydrate = 0;

        public Builder(int servingSize ,int servings){
            this.servings = servings;
            this.servingSize = servingSize;
        }
        public Builder calories(int val){
            calories = val;
            return this;
        }
        public Builder fat(int val){
            fat = val;
            return this;
        }
        public Builder sodium(int val){
            sodium = val;
            return this;
        }
        public Builder carbohydrate(int val){
            carbohydrate = val;
            return this;
        }
        public NutritionFacts build(){
            return new NutritionFacts(this);
        }
        private NutritionFacts(Builder builder){
            servingSize = builder.servingSize;
            servings = builder.servings;
            calories = builder.calories;
            fat = builder.fat;
            sodium = builder.sodium;
            carbohydrate = builder.carbohydrate;
        }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq951127336/article/details/79966800

Effective-Java学习笔记 遇到多个构造器参数时要考虑用构建器

要求创建一个实例,包含多个必选的参数和多个可选参数方法一习惯采用重叠构造器模式,即提供多个参数不同的构造方法,然后根据需要选择相应的构造方法创建实例。但是当有许多参数的时候,代码就很难编写,并难以阅读...
  • leijone
  • leijone
  • 2016-06-15 14:38:32
  • 563

2、遇到多个构造参数的时候需要考虑使用构建器(effective java)

考虑多个构造参数什么意思,一个类的构造参数很多,但是你不是每次构造都用上所有的单数...
  • guanhang89
  • guanhang89
  • 2016-06-07 21:04:37
  • 363

effective java笔记(一) —— 构造器实现之builder模式

当一个类中有大量的构造参数时,静态方法和构造器已经不能满足对象的实例化,那么我们将考虑构建器。 构建器模式:1、重叠构造器模式             2、javaBeans模式(自己常用的一...
  • AlanYangYi
  • AlanYangYi
  • 2015-07-01 22:54:41
  • 1350

Builder模式处理多个构造器

Builder模式拥有重叠构造起器的安全性和JavaBeans模式的可读性。的确,看起来代码舒服好多。当构造器参数比较多的时候推荐使用,构造器比较少的时候就不需要使用这个了。之前封装OKhttp的时候...
  • panzhiling
  • panzhiling
  • 2016-07-18 21:29:43
  • 404

Java构建器模式

构建器模式只适用于需要传入很多种情况参数的时候,比如大于4种参数的配合,才比较划算。 而且值得注意的是:最好在类的设计之初就考虑是否使用构建器,否则日后扩展起来新构建器旧构造器一起用维护起来不方便。...
  • h3c4lenovo
  • h3c4lenovo
  • 2014-08-19 20:05:34
  • 6372

java设计模式---builder---构造器

作用:将一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。...
  • ydd326
  • ydd326
  • 2011-09-09 14:18:34
  • 2282

Java创建字符串是用“”还是用构造器?

原文:Create Java String Using ”” or Constructor? 翻译:get-set 如无特别原因,尽量使用双引号“”来创建字符串,当必须创建一个新的字符串或需要在堆内...
  • get_set
  • get_set
  • 2015-11-17 21:25:22
  • 1358

java构造器和构建器

在实例化一个类的过程中,通常会遇到多个参数的构造函数,但如果有些参数是非必需的呢?每次都要初始化那么多参数么? public class Person { private int id;//身...
  • wh2827991
  • wh2827991
  • 2018-01-09 15:08:01
  • 17

mybatis-SQL语句构建器(七)

SQL语句构建器类 问题 Java程序员面对的最痛苦的事情之一就是在Java代码中嵌入SQL语句。这么来做通常是由于SQL语句需要动态来生成-否则可以将它们放到外部文件或者存储过程中。正如你已经看...
  • u012758088
  • u012758088
  • 2017-02-10 14:27:56
  • 1063

Java构建器(Builder)

Java构建器(Builder) 在设计模式中对Builder模式的定义是用于构建复杂对象的一种模式,所构建的对象往往需要多步初始化或赋值才能完成。那么,在实际的开发过程中,我们哪些地方适合用到B...
  • u012301050
  • u012301050
  • 2017-01-13 16:04:27
  • 279
收藏助手
不良信息举报
您举报文章:遇到多个构造器参数采用构建器 《Effective Java》读书笔记
举报原因:
原因补充:

(最多只允许输入30个字)