遇到多个构造器参数时要考虑用构建器,且看最佳实践代码
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
分享到:
相关推荐
2. **构建器(建造者)**:当类有多个构造器参数时,建造者模式可以提供更清晰的API,避免了构造函数签名的复杂性,使客户端代码更容易阅读和理解。 3. **强化单例属性**:使用私有构造器和枚举类型可以确保单例的...
标题“effective-java.pdf”与描述“effective-java.pdf”表明本文档是关于Java编程实践的指南,且内容可能来自于一本名为《Effective Java》的书籍,该书是由Joshua Bloch编写,被广泛认为是Java编程的权威指南。...
《Effective Java》是Java编程领域的一本经典著作,由Joshua Bloch撰写,第二版发布于2008年。这本书旨在提供实用的编程指导,帮助开发者写出更高效、更可维护的Java代码。以下是对书中核心知识点的详细解读: 1. *...
**遇到多个构造器参数时的考虑**: - **重叠构造器模式**:这种模式下,每个构造器提供比前一个多一个参数,但是这种模式会导致构造器过多,增加复杂度。 - **JavaBeans模式**:虽然使用无参构造器并结合setter方法...
《Effective Java》是Java开发领域的经典著作,由Joshua Bloch撰写,中文版第二版更是深受广大Java开发者喜爱。这本书提供了许多实用的编程实践和经验教训,帮助开发者编写出更高效、可维护的Java代码。这里我们将...
4. **构造器**:书中阐述了如何设计和使用构造器来创建对象,强调了单参数构造器和工厂方法的优缺点,以及如何利用Builder模式来构建复杂对象。 5. **异常处理**:异常处理是Java编程中的一个重要方面,Bloch建议...
2. **构造器与工厂方法**:提倡使用私有构造器和静态工厂方法,以便于控制类的实例化过程,提高代码灵活性,例如实现不可变对象、延迟初始化等。 3. **接口与抽象类**:讨论了接口和抽象类在设计上的差异,强调接口...
在《Effective Java》第三版中,作者分享了28项关键的编程策略,涵盖了类和对象的设计、泛型、枚举、集合、并发等多个方面。以下是这些主题的一些核心知识点: 1. **使用final、static和private修饰符**:强调这三...
第 2 条:当面临许多构造函数参数时考虑构建器 伸缩构造函数模式有效,但是当参数很多时很难编写客户端代码,而且更难阅读 Builder 模式模拟命名的可选参数 Class.newInstance 破坏编译时异常检查 在设计具有构造...
1. **构造器与工厂方法**:书中强调了如何正确使用构造器,包括私有构造器、工厂方法和静态工厂方法。静态工厂方法的优势在于它们可以有选择性地返回类的子类型实例,而无需暴露其实现细节。 2. **设计和实现equals...
当设计类的构造函数或静态工厂具有多个参数时,Builder 模式是一个不错的选择。—— Effective Java,第二版,第39页背景在 Java 中实现 Builder 模式容易出错和重复。即使是一个简单的四字段类,最基本的构建器 ...