Middle
Какво е патърнът за проектиране Builder?
sobes.tech AI
Отговор от AI
Шаблонът за дизайн Builder е предназначен за създаване на сложни обекти стъпка по стъпка. Той отделя процеса на конструиране на обекта от неговото представяне, позволявайки използването на един и същ процес за създаване на различни представяния.
Основни компоненти:
- Builder: Интерфейс или абстрактен клас, който определя методите за създаване на части от обекта.
- ConcreteBuilder: Реализация на интерфейса Builder, която конструира и събира частите на обекта.
- Director: Определя реда на извикване на методите на ConcreteBuilder за създаване на обекта. По избор.
- Product: Сложен обект, който се създава с помощта на шаблона Builder.
Предимства:
- Позволява създаването на сложни обекти стъпка по стъпка.
- Осигурява по-добър контрол върху процеса на изграждане.
- Позволява промяна на вътрешното представяне на обекта.
- Улеснява създаването на различни вариации на един и същи обект.
Пример:
// Продукт
public class Car
{
public string Engine { get; set; }
public string Color { get; set; }
public int Wheels { get; set; }
public void Display()
{
Console.WriteLine($"Колата с двигател: {Engine}, цвят: {Color}, колела: {Wheels}");
}
}
// Builder
public interface ICarBuilder
{
void BuildEngine();
void BuildColor();
void BuildWheels();
Car GetResult();
}
// ConcreteBuilder
public class SportsCarBuilder : ICarBuilder
{
private Car _car = new Car();
public void BuildEngine()
{
_car.Engine = "V8";
}
public void BuildColor()
{
_car.Color = "Червен";
}
public void BuildWheels()
{
_car.Wheels = 4;
}
public Car GetResult()
{
return _car;
}
}
// Director
public class CarDirector
{
private ICarBuilder _builder;
public CarDirector(ICarBuilder builder)
{
_builder = builder;
}
public void Construct()
{
_builder.BuildEngine();
_builder.BuildColor();
_builder.BuildWheels();
}
}
// Използване
public class Program
{
public static void Main(string[] args)
{
ICarBuilder builder = new SportsCarBuilder();
CarDirector director = new CarDirector(builder);
director.Construct();
Car sportsCar = builder.GetResult();
sportsCar.Display();
}
}