Как использовать один конструктор для создания нескольких объектов?

Это прямо из Effective java 2. Я не уверен, что означает это утверждение из пункта 2.

Шаблон Builder является гибким. Один построитель может использоваться для создания нескольких объектов. Параметры построителя можно настраивать между созданиями объектов, чтобы варьировать объекты.

Я не могу придумать пример, чтобы сделать это. Пожалуйста, помогите мне понять это на примере.


person tintin    schedule 20.01.2013    source источник
comment
Пример: en.wikipedia.org/wiki/Builder_pattern#Java   -  person ggrandes    schedule 21.01.2013


Ответы (3)


В этом сообщении блога представлен хороший пример объектов-конструкторов. используется API JavaFX 2.

Один построитель может использоваться для создания нескольких объектов.

Объект построителя отвечает за создание допустимого объекта, но объект не создается, пока вы не вызовете метод 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();

что приведет к созданию одного объекта с текстом, установленным на «Hello There», поскольку это значение свойства до вызова метода build().

Параметры построителя можно настраивать между созданиями объектов, чтобы варьировать объекты.

Пример ниже демонстрирует это.

// 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();
person Benjamin Gale    schedule 20.01.2013
comment
Спасибо за пример, этого не хватало. Ваше здоровье! - person tintin; 21.01.2013

если вы хотите построить дом, вам нужны: стены, полы, лестницы, окна... Когда вы создаете класс HouseBulder, вы можете создавать все эти объекты в своем классе HousBuilder. Таким образом, «пользователь, который хочет дом», не должен знать об объектах: стенах, полах и т. Д. И в каком порядке они должны быть построены.

person micho    schedule 20.01.2013

Шаблон Builder строит сложный объект (сложный объект представляет собой комбинацию многих объектов, и он строит каждый объект один за другим) и, наконец, возвращает сложный объект.

Строительство объекта должно быть очень общим. «Мико» привел очень хороший пример строительства дома. вы должны создать класс HouseBuilder таким образом, чтобы любой новый объект HouseBuilder мог отличаться от другого объекта HouseBuilder. т.е. один человек хочет построить свой дом с лестницей внутри своего дома, тогда как другой человек хочет свой дом без лестницы внутри. Таким образом, ваш сложный объект должен быть очень общим.

person ylnsagar    schedule 20.01.2013