Middle
125
questionbank
Что такое паттерн проектирования 'Строитель' и в каких случаях его лучше всего использовать?
Answer from AI
sobes.tech AI
Строитель (Builder) — это порождающий паттерн проектирования, который позволяет создавать сложные объекты пошагово. Он отделяет конструирование объекта от его представления, позволяя использовать один и тот же процесс строительства для создания различных представлений объекта.
Основные компоненты паттерна:
- Строитель (Builder): Интерфейс, определяющий операции построения частей объекта.
- Конкретный Строитель (Concrete Builder): Реализация интерфейса Строителя, которая конструирует и собирает части конечного продукта.
- Директор (Director): Класс, который использует Строителя для построения объекта. Он определяет порядок вызова строительных шагов.
- Продукт (Product): Сложный объект, который строится с помощью Строителя.
Лучше всего использовать в случаях:
- Когда процесс создания сложного объекта должен быть независим от того, из каких частей этот объект состоит и как они собираются.
- Когда необходимо создавать различные представления одного и того же объекта с помощью одного и того же процесса конструирования.
- Когда конструктор объекта имеет слишком много параметров.
Пример:
// Интерфейс строителя
public interface ICarBuilder
{
void BuildEngine();
void BuildWheels();
void BuildBody();
Car GetCar();
}
// Конкретный строитель
public class SportCarBuilder : ICarBuilder
{
private Car _car = new Car();
public void BuildEngine()
{
_car.Engine = "Sport Engine";
}
public void BuildWheels()
{
_car.Wheels = "Sport Wheels";
}
public void BuildBody()
{
_car.Body = "Sport Body";
}
public Car GetCar()
{
return _car;
}
}
// Продукт
public class Car
{
public string Engine { get; set; }
public string Wheels { get; set; }
public string Body { get; set; }
public void Show()
{
Console.WriteLine($"Car built: Engine={Engine}, Wheels={Wheels}, Body={Body}");
}
}
// Директор
public class Director
{
private ICarBuilder _builder;
public Director(ICarBuilder builder)
{
_builder = builder;
}
public void ConstructSportCar()
{
_builder.BuildEngine();
_builder.BuildWheels();
_builder.BuildBody();
}
}
// Клиентский код
public class Client
{
public static void Main(string[] args)
{
ICarBuilder builder = new SportCarBuilder();
Director director = new Director(builder);
director.ConstructSportCar();
Car sportCar = builder.GetCar();
sportCar.Show();
}
}