`
lxiaodao
  • 浏览: 121296 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

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
分享到:
评论

相关推荐

    Effective Java第三版1

    2. **构建器(建造者)**:当类有多个构造器参数时,建造者模式可以提供更清晰的API,避免了构造函数签名的复杂性,使客户端代码更容易阅读和理解。 3. **强化单例属性**:使用私有构造器和枚举类型可以确保单例的...

    effective-java.pdf

    标题“effective-java.pdf”与描述“effective-java.pdf”表明本文档是关于Java编程实践的指南,且内容可能来自于一本名为《Effective Java》的书籍,该书是由Joshua Bloch编写,被广泛认为是Java编程的权威指南。...

    Effective-Java-2nd-Edition-(May-2008).zip_effective java

    《Effective Java》是Java编程领域的一本经典著作,由Joshua Bloch撰写,第二版发布于2008年。这本书旨在提供实用的编程指导,帮助开发者写出更高效、更可维护的Java代码。以下是对书中核心知识点的详细解读: 1. *...

    Effective-Java读书笔记(上)

    **遇到多个构造器参数时的考虑**: - **重叠构造器模式**:这种模式下,每个构造器提供比前一个多一个参数,但是这种模式会导致构造器过多,增加复杂度。 - **JavaBeans模式**:虽然使用无参构造器并结合setter方法...

    Effective-Java:Effective Java中文版第二版示例代码

    《Effective Java》是Java开发领域的经典著作,由Joshua Bloch撰写,中文版第二版更是深受广大Java开发者喜爱。这本书提供了许多实用的编程实践和经验教训,帮助开发者编写出更高效、可维护的Java代码。这里我们将...

    1_Effective_Java_2nd_Edition_proglib_java_Joshua_

    4. **构造器**:书中阐述了如何设计和使用构造器来创建对象,强调了单参数构造器和工厂方法的优缺点,以及如何利用Builder模式来构建复杂对象。 5. **异常处理**:异常处理是Java编程中的一个重要方面,Bloch建议...

    effectiveJava的笔记

    2. **构造器与工厂方法**:提倡使用私有构造器和静态工厂方法,以便于控制类的实例化过程,提高代码灵活性,例如实现不可变对象、延迟初始化等。 3. **接口与抽象类**:讨论了接口和抽象类在设计上的差异,强调接口...

    Effective.Java3rd.zip

    在《Effective Java》第三版中,作者分享了28项关键的编程策略,涵盖了类和对象的设计、泛型、枚举、集合、并发等多个方面。以下是这些主题的一些核心知识点: 1. **使用final、static和private修饰符**:强调这三...

    effectiveJava:有效的java se 书中的例子

    第 2 条:当面临许多构造函数参数时考虑构建器 伸缩构造函数模式有效,但是当参数很多时很难编写客户端代码,而且更难阅读 Builder 模式模拟命名的可选参数 Class.newInstance 破坏编译时异常检查 在设计具有构造...

    EFFECT JAVA 中文

    1. **构造器与工厂方法**:书中强调了如何正确使用构造器,包括私有构造器、工厂方法和静态工厂方法。静态工厂方法的优势在于它们可以有选择性地返回类的子类型实例,而无需暴露其实现细节。 2. **设计和实现equals...

    Java的Builder模式生成器FreeBuilder.zip

    当设计类的构造函数或静态工厂具有多个参数时,Builder 模式是一个不错的选择。—— Effective Java,第二版,第39页背景在 Java 中实现 Builder 模式容易出错和重复。即使是一个简单的四字段类,最基本的构建器 ...

Global site tag (gtag.js) - Google Analytics