我刚刚阅读了example的精彩builder pattern。
在我的程序中,我正在创建一系列的playerCharacter实体,这些实体可以以各种方式构建,包含一些必填字段,一些可以作为额外字段添加或在后面添加(在构建之后)。因此,在阅读上述帖子后,似乎我需要一个构建器模式。
我是否可以选择构建器和超类(在此示例中,Pizza
和builder
)共享某些方法? 是否有一个整洁的,已知的解决方案?
例如,如果在上面的例子(比萨饼)中,我们有一个Boolean isPizzaCold()
和void heatTo(int degrees)
的方法,我们希望比萨饼在开始时返回假,如它“建立”了热,后来让披萨'变冷',以便冷却。我该如何做到这一点,他们共享相同的方法?
答案 0 :(得分:1)
我真的没有看到你的问题和构建器模式之间的关系。如果您想要方法setTemperature()
和方法isCold()
,只需将它们添加到披萨:
private static final int COLD_THRESHOLD = 40;
private int temperature = 70;
public void setTemperature(int temperature) {
this.temperature = temperature;
}
public boolean isCold() {
return temperature <= COLD_THRESHOLD;
}
答案 1 :(得分:1)
如果您将建筑师带出课堂,它仍然是建筑师。构建器首先是构建对象的便捷方式,并不总是唯一的方法。你甚至可以说创建一个对象显然是一个单独的责任,并且将它分开是更清晰的(就像工厂 - 构建器模式相结合)。我个人认为这主要取决于创作的复杂性。
不,您的对象和构建器类无法共享方法。共享方法的唯一方法是通过继承,这显然不能在这里使用。
你的构建器是一个一次性对象,它构造的对象显然是一个不同的类。您唯一能做的就是存储请求的值,并在构建对象后自动调用相应的setter。
void setTemperature(int t){
this.temperature = t;
}
Pizza build() {
Pizza pizza = new Pizza(... usual constructor stuff);
pizza.setTemperature(temperature);
return pizza;
}
另外,我想知道void setTemperature(int)
是否有意义。 void heatTo(int degrees)
对我来说更有意义:)