C#
class Car
{}
interface Builder
{
void Reset();
void SetSeats(int count);
void SetEngine(string info);
void SetTripComputer(int id);
void SetGPS(bool use);
}
class CarBuilder : Builder
{
private Car _car;
// очистить _car
public virtual void Reset() {_car. = ...}
// Установить количество сидений
public virtual void SetSeats(int count) {_car. = ...}
// Установить поданный двигатель
public virtual void SetEngine(Engine engine) {_car. = ...}
// Установить систему навигации
public virtual void SetTripComputer(int id) {_car. = ...}
// Установить или снять GPS
public virtual void SetGPS(bool use) {_car. = ...}
void Car GetResult() {_car. = ...}
}
// Директор знает, в какой последовательности нужно заставлять
// работать строителя, чтобы получить ту или иную версию
// продукта. Заметьте, что директор работает со строителем через
// общий интерфейс, благодаря чему он не знает тип продукта,
// который изготовляет строитель.
class Director
{
void ConstructSportsCar(Builder builder)
{
builder.Reset();
builder.SetSeats(2);
builder.SetEngine(new SportEngine());
builder.SetTripComputer(true);
builder.SetGPS(true);
}
}
// Директор получает объект конкретного строителя от клиента
// (приложения). Приложение само знает, какого строителя нужно
// использовать, чтобы получить определённый продукт.
class Application
{
void MakeCar()
{
var director = new Director()
CarBuilder builder = new CarBuilder()
director.ConstructSportsCar(builder)
Car car = builder.GetResult()
}
}
C#
class Pizza
{
Pizza(int size) { ... }
Pizza(int size, boolean cheese) { ... }
Pizza(int size, boolean cheese, boolean pepperoni) { ... }
// ...
}