🤔
Что такое builder паттерн? Это порождающий паттерн проектирования, который используется для пошагового создания сложных объектов. Он разделяет процесс конструирования объекта от его представления, позволяя создавать различные представления объекта, следуя одному и тому же процессу конструирования.
🚩
Основные цели и задачи паттерна 🟠
Разделение создания и представленияОтделяет процесс конструирования объекта от его представления, чтобы один и тот же процесс мог использоваться для создания различных представлений объекта.
🟠
Пошаговое создание объектовПозволяет создавать объекты поэтапно, контролируя процесс конструирования и предотвращая создание объекта в неконсистентном состоянии.
🟠
Поддержка неизменяемых объектовМожет использоваться для создания неизменяемых объектов с большим количеством опций и параметров.
🚩
Структура паттерна 🟠
BuilderОпределяет интерфейс для пошагового конструирования объекта.
🟠
ConcreteBuilderРеализует интерфейс Builder и создает конкретный продукт.
🟠
DirectorУправляет объектом Builder и задает алгоритм создания объекта.
🟠
ProductКласс, представляющий создаваемый сложный объект.
🚩
Пример использования паттерна Строитель 1⃣Определение продукта
public class House
{
public string Walls { get; set; }
public string Roof { get; set; }
public string Foundation { get; set; }
public override string ToString()
{
return $"House with {Walls}, {Roof} and {Foundation}";
}
}
2⃣Определение интерфейса Builder
public interface IHouseBuilder
{
void BuildFoundation();
void BuildWalls();
void BuildRoof();
House GetHouse();
}
3⃣Реализация конкретного Builder
public class ConcreteHouseBuilder : IHouseBuilder
{
private House _house = new House();
public void BuildFoundation()
{
_house.Foundation = "Concrete Foundation";
}
public void BuildWalls()
{
_house.Walls = "Concrete Walls";
}
public void BuildRoof()
{
_house.Roof = "Concrete Roof";
}
public House GetHouse()
{
return _house;
}
}
4⃣Определение Director
public class ConstructionDirector
{
private readonly IHouseBuilder _builder;
public ConstructionDirector(IHouseBuilder builder)
{
_builder = builder;
}
public void ConstructHouse()
{
_builder.BuildFoundation();
_builder.BuildWalls();
_builder.BuildRoof();
}
}
5⃣Использование паттерна Строитель
public class Program
{
public static void Main()
{
IHouseBuilder builder = new ConcreteHouseBuilder();
ConstructionDirector director = new ConstructionDirector(builder);
director.ConstructHouse();
House house = builder.GetHouse();
Console.WriteLine(house); // Output: House with Concrete Walls, Concrete Roof and Concrete Foundation
}
}
🚩
Плюсы➕
Контроль процесса созданияПозволяет контролировать процесс создания сложных объектов поэтапно.
➕
ГибкостьРазделение конструирования и представления позволяет использовать один и тот же процесс для создания различных объектов.
➕
Читаемость кодаКод становится более читаемым и поддерживаемым, так как процесс создания объекта инкапсулирован в отдельный класс.
➕
Поддержка сложных объектовУпрощает создание объектов с множеством параметров и сложной иерархией.
Ставь 👍 и забирай 📚 Базу знаний