多个构造器参数的处理方式-----构建器
来源:互联网 发布:梦幻之星新星捏脸数据 编辑:程序博客网 时间:2024/05/17 06:52
第一种处理方式:
/** * * 这个类有很多个参数 * * 其中的servingSize和servings是必须的,其他的是可选的 * * 我们可以采用重叠构造器(telescoping constructor) * * 在这个模式之下,我们最少只需要提供参数个数最少的那个构造器即可,其他的参数默认为0 * * 缺点:如果每个参数都要传入,实例化的时候很南阅读。 */public class NurtritionFacts1 { 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 NurtritionFacts1(int servingSize, int servings) { this(servingSize, servingSize, 0); } public NurtritionFacts1(int servingSize, int servings, int calories) { this(servingSize, servings, calories, 0); } public NurtritionFacts1(int servingSize, int servings, int calories, int fat) { this(servingSize, servings, calories, fat, 0); } public NurtritionFacts1(int servingSize, int servings, int calories, int fat, int sodium) { this(servingSize, servings, calories, fat, sodium, 0); } public NurtritionFacts1(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; } public int getServingSize() { return servingSize; } public int getServings() { return servings; } public int getCalories() { return calories; } public int getFat() { return fat; } public int getSodium() { return sodium; } public int getCarbohydrate() { return carbohydrate; }}第二种方式:
/**
* 对于重叠构造器的难以阅读,我们采用JavaBean模式代替,增加它的可阅读性。
*
* 对每一个成员变量都提供一个setter方法
*
* 也就是把本来该在类实例生成的时候就设置的参数延迟到实例创建成功以后再设置
*
* 这样使得代码很好阅读,但是带来一个问题就是可能出现不同步的问题
*
*/
public class NurtritionFacts2 {
private int servingSize = -1;private int servings = -1;private int calories = 0;private int fat = 0;private int sodium = 0;private int carbohydrate = 0;public NurtritionFacts2() {}public void setServingSize(int servingSize) { this.servingSize = servingSize;}public void setServings(int servings) { this.servings = servings;}public void setCalories(int calories) { this.calories = calories;}public void setFat(int fat) { this.fat = fat;}public void setSodium(int sodium) { this.sodium = sodium;}public void setCarbohydrate(int carbohydrate) { this.carbohydrate = carbohydrate;}public int getServingSize() { return servingSize;}public int getServings() { return servings;}public int getCalories() { return calories;}public int getFat() { return fat;}public int getSodium() { return sodium;}public int getCarbohydrate() { return carbohydrate;}
}
第三种方式:
/**
* 这种方式既有重叠构造器的安全性也有JavaBean模式的可读性
*
* 这就是Builder模式。
*
* 把成员变量用final修饰,就表示一旦初始化,后面就能修改,以保证安全性。
*
*
*/
public class NurtritionFacts3 {
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 static class Builder { private final int servingSize; private final int servings; private int calories = 0; private int fat = 0; private int sodium = 0; private int carbohydrate = 0; public Builder(int servingSize, int servings) { this.servingSize = servingSize; this.servings = servings; } 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 NurtritionFacts3 build() { return new NurtritionFacts3(this); }}private NurtritionFacts3(Builder builder) { servingSize = builder.servingSize; servings = builder.servings; calories = builder.calories; fat = builder.fat; sodium = builder.sodium; carbohydrate = builder.carbohydrate;}
}
测试类代码:
/**
*
* 测试类
*/
public class Main {
public static void main(String[] args) { NurtritionFacts1 nurtritionFacts1 = new NurtritionFacts1(55, 85); NurtritionFacts2 nurtritionFacts2 = new NurtritionFacts2(); nurtritionFacts2.setServingSize(96); nurtritionFacts2.setServings(8555); NurtritionFacts3 nurtritionFacts3 = new NurtritionFacts3.Builder(555, 7777).calories(89).fat(888).sodium(456464).build();}
}
0 0
- 多个构造器参数的处理方式-----构建器
- Effective Java 2 -- 遇到多个构造器参数的时候考虑构建器
- 2、遇到多个构造参数的时候需要考虑使用构建器(effective java)
- 使用Builder模式构建可扩展的多个参数构造器
- java中使用Builder模式构建多个参数的构造器
- 用构造器构建多参数类
- 多个构造器参数
- Effective Java第二条:遇到多个构造器参数时要考虑用构建器
- 第2条:遇到多个构造器参数时要考虑用构建器
- 遇到多个构造器参数考虑用构建器(Builder)
- 02、遇到多个构造器参数时要考虑用构建器
- 遇到多个构造器参数时考虑用构建器
- Effective Java (2) - 遇到多个构造器参数时要考虑用构建器
- 第2条:遇到多个构造器参数时要考虑用构建器
- 第2条:遇到多个构造器参数时,考虑用构建器。
- 第2条:遇到多个构造器参数时要考虑用构建器
- 遇到多个构造器参数时要考虑用构建器
- 第2条:遇到多个构造器参数时要考虑用构建器
- 浅谈“函数调用”在VS中怎样实现
- CAN--11898
- Cookies 和 Session的区别
- 决定写博客记录自己的技术历程
- 数据库表设计——转盘抽奖功能
- 多个构造器参数的处理方式-----构建器
- Linux-ASoC驱动归纳总结:
- Java多线程生产者消费者
- C++模板实现冒泡排序
- 利用Scrapy爬取所有知乎用户详细信息并存至MongoDB
- LightOJ-1038-Race to 1 Again(概率dp)
- linux yum命令详解
- 题目1141:Financial Management
- "_OBJC_CLASS_$_xxx", referenced from: symbol(s) not found for architecture x86_64