3

我刚刚阅读了一个很棒的构建器模式示例

在我的程序中,我创建了一系列 playerCharacter 实体,它们可以以各种方式构建,其中包含一些必填字段,有些可以作为额外字段添加或稍后添加(构建后)。所以,在阅读了上面的帖子之后,似乎我需要一个构建器模式。

我是否可以选择共享一些方法的构建器和超类(这里,在示例中Pizza和)?有没有一个整洁的、已知的解决方案?builder

例如,如果在上面的例子中(披萨的),稍后我们有一个 and 的方法,Boolean isPizzaCold()我们void heatTo(int degrees)希望披萨返回 false 开始,因为它是热的,然后让披萨变冷',使其冷却。我将如何做到这一点,以便他们共享相同的方法?

[编辑:根据乔里的建议,我改变了方法示例。]

4

2 回答 2

1

我真的看不出您的问题与构建器模式之间的关系。如果你想要一个 methodsetTemperature()和一个 method isCold(),只需将它们添加到 Pizza 中:

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;
}
于 2012-07-24T11:09:39.030 回答
1

如果你把建造者带出课堂,它仍然是建造者。构建器首先是构造对象的便捷方式,它并不总是需要成为唯一的方式。您甚至可以声明创建对象显然是一项单独的责任,并且将其分开更清洁(就像工厂 - 构建器模式相结合)。我个人认为这主要取决于创作的复杂性。

不,您的对象和构建器类不能共享方法。共享方法的唯一方法是通过继承,显然这里不使用。

您的构建器是一次性对象,它构造的对象显然属于不同的类。您唯一能做的就是存储请求的值,并在构建对象后自动调用适当的设置器。

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)对我来说更有意义:)

于 2012-07-24T11:21:09.830 回答