`
azvf
  • 浏览: 144249 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Build模式

阅读更多
package effective;

/**
 * @{# natureFcit.java Create on 2013-6-18 下午5:29:06 description:
 * @author SHY
 * @version 1.0
 */
// Builder Pattern
public class NutritionFacts {
    public static void main(String[] args) {
	/*
	 * 从下面的使用中可以看出,Builder模式模拟了具名参数,可以提高代码的可读性和维护性,降低使用的风险。
	 * 
	 * 不过,Builder模式也有显著的缺点,最明显的就是每次创建对象的时候都要额外的创建一个builder对象,
	 * 这个对于注重性能的系统是一个问题。
	 * 
	 * 另外,Builder模式从形式上也要比一般的构造函数复杂。所以Joshua建议除非构造函数的
	 * 参数很多,而且大部分都是可选的,否则首先还是不要考虑Builder模式。
	 * 
	 * 还有,java中使用链式调用方法,很酷
	 */
	NutritionFacts cocaCola = new NutritionFacts.Builder(240, 8)
					.calories(100).sodium(30).carbohydrate(29).build();

    }
    private final int servingSize; // required
    private final int servings; // required
    private final int calories; // optional
    private final int fat; // optional
    private final int sodium; // optional
    private final int carbohydrate; // optional

    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 sodium = 0;
	private int carbohydrate = 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 sodium(int val) {
	    sodium = val;
	    return this;
	}

	public Builder carbohydrate(int val) {
	    carbohydrate = 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;
    }
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics