4

これはEffective Java 2からそのままです。アイテム2のこのステートメントが何を意味するのかわかりません

Builder パターンは柔軟です。単一のビルダーを使用して、複数のオブジェクトを構築できます。ビルダーのパラメーターは、オブジェクトを作成するたびに微調整して、オブジェクトを変えることができます。

これを行う例を思いつくことができません。例でこれを理解するのを手伝ってください。

4

3 に答える 3

7

このブログ投稿は、JavaFX 2 API で使用されているビルダー オブジェクトの良い例を示しています。

単一のビルダーを使用して、複数のオブジェクトを構築できます。

ビルダー オブジェクトは有効なオブジェクトの構築を担当しますが、メソッドを呼び出すまでオブジェクトは構築されません。build()これは、同じビルダーを複数回使用して、まったく異なるオブジェクトを構築できることを意味します。

例:

final TextBuilder builder = TextBuilder.create()

final Text text1 = builder
    .text("Hello World!")
    .x(50).y(50)
    .fill(Color.WHITE)
    .font(MY_DEFAULT_FONT)
    .build();

final Text text2 = builder
    .text("Goodbye World!")
    .x(50).y(100)
    .fill(Color.WHITE)
    .font(MY_DEFAULT_FONT)
    .build();

これは、さまざまなオブジェクトを作成するために何度でも実行できます。メソッドが呼び出されるまでオブジェクトが作成されないという点を繰り返すためにbuild()、次のことができると考えてください。

final Text text1 = TextBuilder.create()
    .text("Hello World!")
    .text("Goodbye World!")
    .text("Hello There!")
    .build();

これは、build()メソッドが呼び出される前のプロパティの値であるため、テキストが「Hello There」に設定された 1 つのオブジェクトが作成されます。

ビルダーのパラメーターは、オブジェクトを作成するたびに微調整して、オブジェクトを変えることができます。

以下の例は、これを示しています。

// Set the properties that are common to all objects.
final TextBuilder builder = TextBuilder.create()
    .x(50)
    .fill(Color.WHITE)
    .font(MY_DEFAULT_FONT);

// Use the builder to construct different objects that have the 
// properties set above as well as the additional ones set here.
final Text text1 = builder.text("Hello World!").y(50).build();
final Text text2 = builder.text("Goodbye World!").y(100).build();
final Text text3 = builder.text("JavaFX is fun!").y(150).build();
于 2013-01-20T21:23:33.547 に答える
0

ビルダーパターン複雑なオブジェクトを構築し(複雑なオブジェクトは多くのオブジェクトの組み合わせであり、各オブジェクトを1つずつ構築します)、最後に複雑なオブジェクトを返します。

オブジェクトの構築は非常に一般的である必要があります。「Micho」は家の建設の非常に良い例を示しました。新しいHouseBuilderオブジェクトが他のHouseBuilderオブジェクトと異なるように、HouseBuilderクラスを作成する必要があります。つまり、ある人は家の中に階段のある家を建てたいのに対し、別の人は家の中に階段のない家を建てたいと思っています。したがって、複雑なオブジェクトは非常に一般的である必要があります。

于 2013-01-20T22:18:13.970 に答える
0

家を建てる場合に必要なもの: 壁、床、階段、窓... HouseBulder クラスを作成すると、これらすべてのオブジェクトを HousBuilder クラスで作成できます。したがって、「家が欲しいユーザー」は、オブジェクトについて知る必要はありません。壁、床、....そして、どの順序で構築する必要があるかを知る必要はありません。

于 2013-01-20T20:52:08.687 に答える