Паттерны проектирования: Строитель (Builder)

Состояние (State) —паттерн проектирования, который позволяет разделить создание сложного объекта и инициализацию его состояния так, что одинаковый процесс построения может создать объекты с разным состоянием.

Простейшая схема работы паттерна:

Предположим, что мы занимаемся созданием робота для сборки компьютера, он может собирать компьютера 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);

Полученный результат:

Исходный код учебного проекта: http://1drv.ms/1tvlBf6

Добавить комментарий