Andriy Shyrokoryadov

.Net developer, data scientist

Фабрика. Шаблоны проектирования - видео №4. №41.

Текст к видео "#41 Фабрика" на канале YouTube

Сегодня мы познакомимся не с одним шаблоном проектирования, а с тремя шаблонами, которые носят общее название «Фабрика». Как правило, когда программисты общаются на тему шаблонов или конкретного приложения, в котором шаблоны были использованы, то если они используют слово «фабрика», они имеют в виду один из 3 шаблонов, о которых будет сказано пара слов далее.

Общее назначение шаблона «Фабрика» — это создание объекта, реализующего определенный интерфейс или группы объектов, которые реализуют общий интерфейс. По факту это замена создания объекта при помощи ключевого слова new на создание объекта в «фабрике». Как вы уже догадались, «фабрика» — это класс, в рамках которого создаются новые объекты.

Вы, наверное, хотели бы спросить, а что плохого в ключевом слове new. В принципе, ничего плохого нет. Это стандартный синтаксис некоторых языков программирования уже на протяжении нескольких десятков лет и используется повсеместно. Если у вас есть какой-то специализированный класс и вы создаете его объекты в ограниченном количестве, то скорей всего всё нормально. Однако если объекты класса создаются повсеместно или очень часто в разных местах в нашем коде, то у нас могут быть проблемы, когда данный класс будет изменен. Есть шанс что в некоторых частях нашего кода измененная имплементация работать не будет или будет ошибочной. А ситуация может быть еще хуже, если вам необходимо изменить конструктор данного класса. Это означает множество изменений везде, где вы создаете данный объект при помощи ключевого слова new. Здесь нам поможет шаблон «фабрика», по сути, 3 шаблона.

Шаблон «Фабрика» — это класс, в котором реализована функциональность создания объектов. Данный класс — это единственное место, где можно получить объект класса «продукта фабрики». Следовательно, если есть необходимость изменить класс-продукт это изменение происходит в одном месте в коде. Как правило фабрики возвращают не объект класса – продукта, а объект, который реализует определенный интерфейс. Делать свой код зависимым от абстракций, то есть интерфейсов и абстрактных классов – это правило хорошего тона для программистов.

Итак, что из себя представляют 3 шаблона – фабрики:

  1. Простая фабрика – на основании определённых параметров фабрика возвращает определенный объект, который реализуют определенный интерфейс. Данный объект – это продукт фабрики.
  2. Фабричный метод – в данном случае имеется определенный базовый абстрактный класс фабрики, который определяют общую функциональность. Классы - реализации данного абстрактного класса переопределяют абстрактные методы и определяют какие объекты будут произведены фабрикой. Переопределение методов определяет, что будет произведено. Отсюда и название данного шаблона.
  3. Абстрактная фабрика – здесь фабрика производит целые группы, взаимосвязанных логически, объектов – продуктов, но основании которых мы создаём новый объект.

Выводы:

  • Класс-фабрики производит объект либо группы объектов;
  • Продукты фабрики – это объекты, реализующие определенный интерфейс
  • Потребители продуктов фабрики находятся в различных частях кода и зависят от класса-фабрики или интерфейса фабрики. Второе конечно же лучше.
  • Под шаблоном «фабрика» понимается 3 шаблона, связанных с созданием объектов.

Пример кода из видео на GitHub

Для открытия файла проекта необходимо Visual Studio 2019.