遇到多个构造器参数时要考虑用构建器,且看最佳实践代码
4、builder模式解决了上述问题
适应多参数,安全,方便编写,可维护性高。
5、builder实现
builder模式的一种实现方式:NutritionFacts类
对参数强加约束条件的方式。
6、builder模式缺点
为了创建对象,必须先创建它的构建器,开销增大。
实现冗长,比重叠构造器更冗长,只有在很多参数的时候才使用。
总结
本实现是builder模式的实现的一种方式。
如果类的构造器或者静态工厂中具有多个参数,设计时使用Builder模式是很好的选择。
Q:什么情况下不用??hibernate的domain
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