3

ビルダー パターンの素晴らしいを読みました。

私のプログラムでは、一連の playerCharacter エンティティを作成しています。これは、さまざまな方法で構築できます。いくつかの必須フィールドと、エクストラとして追加したり、後で (構築後に) 追加したりできるフィールドがあります。したがって、上記の投稿を読んだ後、ビルダー パターンが必要なようです。

一部のメソッドを共有するビルダーとスーパー クラス (ここでは、例のPizzaと) のオプションはありますか? これに対するきちんとした既知の解決策はありますか?builder

たとえば、上記の (ピザの) 例で、後で and のメソッドがBoolean isPizzaCold()ありvoid heatTo(int degrees)、ピザが最初に false を返すようにしたいとします。冷える」ということで、冷えます。同じメソッドを共有するようにするにはどうすればよいですか?

[編集Joeriの提案に従って、メソッドの例を変更しました。]

4

2 に答える 2

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 に答える
1

あなたの質問とビルダーパターンの関係がよくわかりません。setTemperature()methodと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 に答える