
Строитель (Builder) —паттерн проектирования, который позволяет разделить создание сложного объекта и инициализацию его состояния так, что одинаковый процесс построения может создать объекты с разным состоянием.
Простейшая схема работы паттерна:
Предположим, что мы занимаемся созданием робота для сборки компьютера, он может собирать компьютера 2 видов, бюджетный и премиум. Компьютер будет включать в себя процессор, оперативную память, жесткий диск, видеокарту. Остальные детали опустим, для простоты.
Реализуем абстрактный класс, реализующий описание частей компьютера:
public abstract class BaseComputer
{
public abstract void GetProcessor();
public abstract void GetRom();
public abstract void GetHdd();
public abstract void GetVideoCard();
}
Теперь создадим классы, реализующие сборку обычного и мощного компьютера. Для этого создадим классы, унаследованные от BaseComputer. Класс сборки обычного компьютера будет выглядеть следующим образом:
class StandartComputer:BaseComputer
{
public override void GetProcessor()
{
Console.WriteLine("Intel i3");
}
public override void GetRom()
{
Console.WriteLine("4Gb");
}
public override void GetHdd()
{
Console.WriteLine("500Gb");
}
public override void GetVideoCard()
{
Console.WriteLine("GeForce GT 730");
}
}
Класс для сборки мощного компьютера будет практически аналогичным, за исключения запчастей, встраиваемых в сам компьютер.
class PremiumComputer:BaseComputer
{
public override void GetProcessor()
{
Console.WriteLine("Intel i7");
}
public override void GetRom()
{
Console.WriteLine("16Gb");
}
public override void GetHdd()
{
Console.WriteLine("2Tb");
}
public override void GetVideoCard()
{
Console.WriteLine("GeForce GTX 980");
}
}
}
Осталось добавить класс, занимающийся непосредственно сборкой, назовём его Director.
class Director
{
public void Construct(BaseComputer computer)
{
computer.GetProcessor();
computer.GetRom();
computer.GetHdd();
computer.GetVideoCard();
}
}
Теперь протестируем.
var director = new Director();
var standartComputer = new StandartComputer();
var premiumComputer = new PremiumComputer();
Console.WriteLine("--Надо собрать обычный компьютер");
director.Construct(standartComputer);
Console.WriteLine("\n--Надо собрать дорогой и мощный компьютер");
director.Construct(premiumComputer);
Полученный результат:
Исходный код учебного проекта: https://github.com/flash2048/Patterns/tree/master/Builder