Есть Строитель.Язык программирования не имеет значения.
Какой из них верный:
- вы установили компоновщик
- вы можете вызвать
Build()
столько раз, сколько вам нравится.Таким образом, в результате вы получите X объектов с одинаковыми параметрами (или даже измененные параметры, если добавите больше настроек).
- вы настроите компоновщик
- после вызова
Build()
, строитель должен быть настроен заново, чтобы иметь возможность строить другой объект.
Есть ли соглашение о том, как должен вести себя Build()
?
Оба сценария могут быть действительными. В первом сценарии вы должны скопировать значения, во втором вы можете переместить значения из построителя в созданный объект.
Я бы хотел правильноНазовите «строителей», чтобы иметь возможность различать поведение, просто читая имя; комментарии к коду - это ложь, код всегда говорит правду.
=== edit
Решение для C ++11 довольно интересно:
class Builder final
{
public:
Result Build() &&;
Result Build() & const; //if you allow building multiple times
};
//... usage:
auto optimized = Builder().Build();
auto builder;
auto copy = builder.Build();
auto optimized2 = std::move(builder).Build();
Использование переменной после std::move
в основном считается недействительной операцией (это допустимое, но не определенное состояние, пока вы не установите новое состояние этой переменной или не скажете ввведите документацию, что это нормально тo использовать его)