Это 1 января 2021 года, но большинство из нас все еще в режиме вечеринки! Я уверен, что вы, должно быть, думали о новогоднем решении достичь новых целей и сделать этот год лучшим в вашей жизни. Желаю вам счастливого Нового года 😃. Поскольку наш режим вечеринки все еще включен, давайте изучим заводской шаблон, реализовав пример использования алкогольного магазина! Есть три варианта заводской выкройки.

  1. Простая фабрика. (Не шаблон, это просто парадигма программирования.)
  2. Заводской метод.
  3. Абстрактная фабрика.

В этом сообщении блога мы изучим простые фабрики и фабричные методы, а в следующей - абстрактные фабрики.

Вопрос - Что такое завод?

Ответ - Ну, она производит массовые продукты, которые потом продаются покупателям в розничном магазине.

Вопрос - Почему нельзя производить продукцию в розничном магазине?

Ответ - Вы что, сваливаете! Производить массовые продукты не так-то просто. Для этого требуется сырье, гигантская техника, большое пространство, много рабочих. Как вы можете положить их все в свой розничный магазин !.

Вернемся к шаблону проектирования фабрики. Из приведенного выше диалога можно получить контекст и использование фабричного шаблона. Заводской метод используется для создания экземпляра объекта класса. Подождите, мы можем сделать это с помощью нового ключевого слова, верно? Что с этим не так?

При таком подходе возникает пара проблем. Вот они,

  1. В реальном мире создание объекта часто не так просто. Нам может потребоваться выполнить бизнес-логику или выполнить некоторые вычисления перед созданием нового объекта.
  2. Может быть много мест, где нам нужно реализовать ту же логику для создания экземпляра определенного объекта. Вы хотите повторять один и тот же код несколько раз? Конечно, нет!

Итак, какое решение? Очевидно, мы можем отделить логику создания экземпляра и инкапсулировать ее в другом классе. Этот класс будет фабрикой, которая предоставит нам экземпляры объекта. Эта идея - не что иное, как простая фабрика.

Преимущества

  1. Мы выделили логику создания в отдельный метод. Итак, теперь у нас есть один источник изменений. Всякий раз, когда нам нужно изменить логику, мы можем сделать это в одном месте. Мы удалили дублирование кода.
  2. Наш код теперь выглядит чище. Мы разделили уровни проблем. Завод несет ответственность за создание, а клиент - за его использование! Клиенту не нужно знать процесс создания.

Заводской метод

Давайте разберемся с фабричным методом на примере. Мы создаем сайт для алкогольной марки. Конечно, алкоголь ограничен в определенных географических регионах, поэтому мы не можем продавать его в этих регионах. Кроме того, существуют возрастные ограничения на покупку алкоголя. Посмотрим, как мы можем это реализовать. Во-первых, давайте создадим класс алкоголя и несколько конкретных подклассов алкоголя.

Теперь давайте определим интерфейс для фабрики. Этот интерфейс будет реализован конкретными фабричными классами.

Давайте использовать нашу фабрику, чтобы приготовить наш любимый напиток.

Таким образом мы можем извлечь детали реализации из клиентского кода и инкапсулировать их. Мы откладываем создание экземпляра объекта и позволяем подклассам решать на основе нашей настраиваемой логики, какие объекты создавать.

Еще одно мощное преимущество наличия общего интерфейса - AlcoholFactory - это то, что мы можем использовать полиморфизм для обмена экземплярами одного класса с другим классом на основе нашей логики. Предположим, что клиент заказывает пиво, но у нас нет пива, тогда мы можем сформулировать нашу логику так, что, поскольку водка также является алкогольным пивом, мы можем рекомендовать водку нашим клиентам. Поскольку VodkaFactory и BeerFactory реализуют общий интерфейс - AlcoholFactory, мы можем заменить экземпляр пива на водку во время выполнения. Возможно, я привел глупый пример, но идею вы поняли. Ладно, вот и все, мы выучили заводской шаблон. Давайте посмотрим на определение фабричного паттерна в соответствии с книгой «Банда четырех».

Определите интерфейс для создания объекта, но позвольте подклассам решать, какой класс создавать. Метод Factory позволяет классу отложить создание экземпляра, которое он использует, до подклассов.

Увидимся в следующем посте о методе абстрактной фабрики.

Спасибо за прочтение!

Удачного кодирования 😄