Рубрики
Без рубрики

Шаблоны проектирования: Фабричный шаблон, Часть 2

первоначально опубликовано: henricodesjava.blog Всех с новым годом! Надеюсь, что ты… С тегами java, ооп, шаблоны проектирования, фабрика.

первоначально опубликовано на: хенрикодесьява.блог

Всех с новым годом! Надеюсь, вы в восторге от нового года программирования, обучения и роста

В последний раз мы остановились на четвертой главе Шаблоны проектирования Head First: Удобное для мозга руководство , в которой рассматриваются шаблоны Factory. В этом посте мы рассмотрим второй шаблон в главе, известный как “Абстрактный фабричный шаблон”.

Оба фабричных шаблона отвечают за инкапсуляцию создания объекта, другими словами, за инкапсуляцию конкретной реализации. Шаблон фабричного метода достиг этого с помощью наследования, абстрактный фабричный шаблон выполняет это с помощью композиции.

Давайте продолжим использовать наш пример магазина пиццы из части 1. Учебник дает нам гипотетический пример, в котором мы хотим контролировать, какие ингредиенты используются во всех будущих магазинах пиццы. Важно отметить, что во всех магазинах будут использоваться те или иные виды теста, соуса, сыра и моллюсков. Это означает, что будет несколько различных типов каждого ингредиента. Здесь вы можете сгруппировать их в “семейство ингредиентов”.

Что мы сделаем, так это создадим фабричный класс для каждого из этих регионов. Фабрика ингредиентов в Чикаго, Нью-Йорке и Калифорнии. И каждая из этих фабрик будет реализовывать общий java-интерфейс PizzaIngredientFactory. Давайте взглянем на диаграмму классов для этого решения. Калифорнийская фабрика ингредиентов не показана для краткости.

Это немного запутанно, но внимательно посмотрите на отношения на этой диаграмме классов.   Что мы видим, так это то, что каждая категория ингредиентов (Тесто, Соус, Сыр, Моллюски) имеет интерфейс, который затем имеет реализации, соответствующие региону. И эти реализации исходят из их соответствующего PizzaIngredientFactory.   Это отправная точка для того, чтобы дать формальное определение нашему шаблону.

Абстрактный фабричный шаблон: Предоставляет интерфейс для создания семейств связанных или зависимых объектов без указания их конкретных классов.

Ниже приведен интерфейс PizzaIngredientFactory.

Ниже приведены реализации этого интерфейса в Нью-Йорке и Чикаго.

Мы еще не закончили. Нам нужно будет внести изменения в пиццу, чтобы во всех пиццах использовались только ингредиенты фабричного производства, вместо того, чтобы принимать какие-либо строки. Ниже приведена абстрактная пицца. Найдите минутку, чтобы оглянуться на мой пост в части 1 и заметить внесенные изменения. Эта абстрактная пицца, а также все интерфейсы и реализация ингредиентов не показаны на приведенной выше диаграмме классов для краткости.

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

Наконец, давайте взглянем на более высокий уровень использования клиентом этих пицц. Ниже находится пиццерия в Нью-Йорке.

И здесь мы видим, что конструктор для ‘NYPizzaIngredientFactory’ устанавливается в общий элемент данных ‘PizzaIngredientFactory’. Затем он передается каждому конструктору типов пиццы. БУМ, все волшебство происходит на заднем плане!

Это большая работа, и диаграмма классов может выглядеть немного запутанной, но это то, что нужно, чтобы получить реализацию абстрактного фабричного шаблона. Если вы хотите взглянуть на полную кодовую базу для этого примера, ознакомьтесь с ней здесь . Спасибо за чтение

Оригинал: “https://dev.to/henriguy/design-patterns-factory-pattern-part-2-17la”