Java 使用Builder解决构造函数参数过多的问题
2017-08-30 14:08
274 查看
Effective Java学习笔记:
构造函数中,如果需要初始化的参数很多,那么为每种初始化方式都写一个构造函数的话,工作会过于繁重。通过使用Builder模式,可以解决构造函数中参数过多的问题。
定义一个内部类Builder,其成员变量与外部类一致;
为外部类中每一个(可选)变量各定义一个类似setter()的方法;
Builder的构造函数返回外部类的实例。
示例:
构造函数中,如果需要初始化的参数很多,那么为每种初始化方式都写一个构造函数的话,工作会过于繁重。通过使用Builder模式,可以解决构造函数中参数过多的问题。
定义一个内部类Builder,其成员变量与外部类一致;
为外部类中每一个(可选)变量各定义一个类似setter()的方法;
Builder的构造函数返回外部类的实例。
//Builder Pattern public class NutritionFacts{ public final int servingSize; public final int servings; public final int calories; public final int fat; public final int sodium; public final int carbohydrate; //静态内部类Builder public static class Builder{ //必选变量 private final int servingSize; private final int servings; //可选变量 private final int calories = 0; private final int fat = 0; private final int sodium= 0; private final int carbohydrate= 0; //Builder的构造函数 public Builder(int servingSize, int servings){ this 4000 . servingSize = servingSize; this.servings = servings; } //Builder的成员方法返回其自身,所以可以链式调用 //类似于setter()方法 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; } //Builder的build方法,返回外部类的实例 public NutritionFacts build(){ return new NutritionFacts(this); } } //外部类的构造函数 private NutritionFacts(Builder build){ servingSize = build.servingSize; servings = build.servings; calories = build.calories; fat = build.fat; sodium = build.sodium; carbohydrate = build.carbohydrate; } }
示例:
NutritionFacts cocaCola = new NutritionFacts.Builder(240, 8).calories(100).sodium(35).carbohydrate(27).build();
相关文章推荐
- 【Effective Java】Ch2_创建销毁对象:Item2_当构造函数参数过多时考虑使用builder
- Java (Builder 模式) 解决Contruct构造器中参数过长的问题
- Java路径问题最终解决方案使用演示
- 解决Java读取properties文件的中文问题的新办法(不使用native2ascii.exe及其他工具)
- 解决java从url传来的参数乱码问题
- Enterprise Library- Data Block使用oracle存储过程,字符串参数传入值为""时出现问题的解决
- 使用maven构建项目java.nio.BufferOverflowException问题的解决
- js,java实现escape()和unescape()函数解决以给方式提交中中文参数问题
- Java 开发报表时参数丢失问题解决方案
- 使用网上流传的一个数据库连接池在Proxy.newProxyInstance处引起 java.lang.ClassCastException 问题的解决方法
- asp.net c#的传参中经常使用到中文参数的处理,下面的函数可以解决中文参数的问题
- Effective Java Item2:当构造方法的参数(尤其是可选参数)比较多时使用Builder模式
- Java使用Oracle遇到的最大游标超出问题及其解决方法
- 解决VIsta iis7中asp无法使用中文参数的问题
- 使用asx3m与xstream配合解决flex与java利用httpservice传递xml数据问题
- 使用Hibernate轻松解决java中date与datetime类型不兼容的问题
- Enterprise Library- Data Block使用oracle存储过程,字符串参数传入值为""时出现问题的解决
- 解决Java读取properties文件的中文问题的新办法(不使用native2ascii.exe及其他工具)
- AJAX 解决 JSP中JS向JAVA代码传参数问题!
- 如何解决mid使用过程中出现的以下问题(无效的过程调用或参数: 'mid')