EffectiveJava-第2条 遇到多个构造器参数时要考虑用构建器

遇到多个构造器参数时要考虑用构建器,且看最佳实践代码

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 static class Builder
{
// Required parameters
private final int servingSize;
private final int servings;
// Optional parameters - initialized to default values
private int calories = 0;
private int fat = 0;
private int carbohydrate = 0;
private int sodium = 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 carbohydrate(int val)
{
carbohydrate = 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;
calories = builder.calories;
fat = builder.fat;
sodium = builder.sodium;
carbohydrate = builder.carbohydrate;
//对象域抛出异常
if(this.fat>this.sodium){
throw new IllegalArgumentException("The fat must be little than sodium!!");
}
}

public static void main(String[] args)
{
NutritionFacts cocaCola = new NutritionFacts.Builder(240,8).calories(100).sodium(35).carbohydrate(27).build();
System.out.println(cocaCola);
}
}


4、builder模式解决了上述问题
适应多参数,安全,方便编写,可维护性高。
5、builder实现
builder模式的一种实现方式:NutritionFacts类
对参数强加约束条件的方式。
6、builder模式缺点
为了创建对象,必须先创建它的构建器,开销增大。
实现冗长,比重叠构造器更冗长,只有在很多参数的时候才使用。
总结
本实现是builder模式的实现的一种方式。
如果类的构造器或者静态工厂中具有多个参数,设计时使用Builder模式是很好的选择。
Q:什么情况下不用??hibernate的domain
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值