4

builder patternアプリケーション内で複合体を作成するために を使用することを検討してobjectsいます。ただし、使用する正しいパターンであるかどうかについては懸念があります。

この例を見てください。ここでは、適切に機能するいくつかのコンクリートPizzaBuildersが作成されているのがわかります。ただし、私のアプリケーションでは、構築されているものに関する情報を渡す機能が必要です。たとえば、 の場合、ユーザーがやなどの特定のものを選択できるPizzaBuildersを作成する機能が必要です。ビルダーに渡す必要がある情報はさまざまであることは注目に値します。custom pizzasaucetoppings

この問題に対して正しいパターンを使用することを考えているのか、それとももっと適したものがあるのか​​ 教えてください。それが問題の正しいパターンである場合、ビルダーに情報を渡す最もクリーンな方法についてアドバイスしていただけますか? インスタンス化の時点でしょうか?

4

4 に答える 4

2

たとえば、PizzaBuilders の場合、ユーザーがソースやトッピングなどの特定のものを選択できるカスタム ピザを作成する機能が必要です。

選択可能 - これらはオプションの要素を意味します。ここでは Builder パターンが最適です。質問で何かを省略しない限り。

于 2013-04-27T13:11:16.087 に答える
2

次のようなものを使用できると思います:

// normal pizza:
Pizza normalPizza=PizzaBuilder.aPizza().withCheese().withSalami().build();

// custom pizza
Pizza customPizza=PizzaBuilder.aCustomPizza().withAnchovis().withHotSauce().withExtraCheese().withoutGarlic().build();

build() が Pizza オブジェクト (または適切なサブクラス) を返す限り、ビルダーが内部で何をするかは実装次第です。with... メソッドまたは build() で必要な一貫性チェックを行うこともできます。

結果に Typesafety が必要な場合は、buildCustomPizza() を使用してカスタム Pizza タイプを返すことができます。

于 2013-04-27T13:12:23.410 に答える
2

ビルダーパターンが必要なようです。そのウィキペディアの記事では、さまざまな事前定義されたビルダーを見ることができます。ただし、Builder パターンを使用する方法はこれだけではありません。

それを使用してカスタム オブジェクトを確実に作成できます。その長所の 1 つは、複数のコンストラクターを定義する必要なく、複雑なオブジェクトをアトミックに作成できることです。これにより、コードの保守が容易になります。このパターンの使用を正当化するのに十分な複雑さがない場合、やり過ぎになる可能性があることに注意してください。

より包括的な説明については、Joshua Bloch の「Effective Java」で提供されているこのパターンの説明を参照してください。ここにそれに関する記事があります

于 2013-04-27T13:00:43.777 に答える