哪种构建方法更可取?

时间:2015-03-05 11:25:01

标签: java design-patterns builder

我正在阅读" Effective Java 2n Edition"来自Joshua Bloch。我的问题是关于第2项和第34条;当面对许多构造函数参数时考虑一个构建器"。

本书中缩写的例子:

public class NutritionFacts {
    private final int calories;

    public static class Builder {
        private int calories = 0;

        public Builder(){}

        public Builder calories(int val) {
            calories = val;
            return this;
        }

        public NutritionFacts build(){
           return new NutritionFacts(this);
        }
    }

    private NutritionFacts(Builder builder){
        calories = builder.calories;
    }
}

调用它:NutritionFacs cocaCola = new NutritionFacts.Builder().calories(300).build()

我的版本

public class NutritionFacts {
    private int calories;

    public NutritionFacts calories(int calories) {
        this.calories = calories;
        return this;
    }
}

调用:NutritionFacts cocaCola = new NutritionFacts().calories(300);

那么这本书中的例子的优点是什么?我只看到了我的解决方案无法实现的不变性。

1 个答案:

答案 0 :(得分:1)

您使用的是Eclipse吗?在这种情况下,我建议您安装addon / plugin Fluent Builder。我经常使用它来生成实体的构建器以用于测试目的。

此插件生成了构建器如何构建的非常好的示例。我不得不承认它不是一个纯粹的Builder模式,而是一个流畅的模式。无论如何,我相信它的代码非常适合你学习Builder Pattern的目的及其好处。