Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

Порождающие шаблоны / Абстрактная фабрика / Фабрика пиццы

Фабрика пиццы (паттерн Абстрактная фабрика)

Описание

Каждая пицца условно состоит из нескольких типов ингредиентов:

  • какое-то мясо (бекон, колбаса, курочка, сосиски, рыба)
  • какой-то сыр (моцарелла, пармезан, чеддер, веганский)
  • какой-то соус (томатный, горчичный, сырный, фирменный)
  • какое-то дополнение (помидоры, маслины, грибы, ананасы)

Например, пицца Пепперони выглядит так:

  • мясо - колбаса пепперони
  • сыр - моцарелла
  • соус - фирменный
  • дополнение - нет

А вот пицца Грибное ассорти:

  • мясо - нет
  • сыр - веганский
  • соус - горчичный
  • дополнение - грибы

Иерархия продуктов

Каждую группу продуктов можно представить в виде отдельного абстрактного класса (или интерфейса), от которого наследуют конкретные продукты.

  • Абстрактный класс Meat (Мясо)

    • Класс PepperoniMeat (Пепперони)
    • Класс ChickenMeat (Курица)
  • Абстрактный класс Sauce (Соус)

    • Класс MustardSauce (Горчичный)
    • Класс FirmSauce (Фирменный)
  • Абстрактный класс Cheeze (Сыр)

    • Класс MozarellaCheeze (Моцарелла)
    • Класс VeganCheeze (Веганский)
  • Абстрактный класс Addition (Дополнение)

    • Класс MushroomsAddition (Грибы)
    • Класс PineappleAddition (Ананасы)

Реализация единого интерфейса облегчает работу с продуктами каждой группы, ведь к PepperoniMeat и ChickenMeat при необходимости можно обратиться сходным образом.

Конкретные фабрики и абстрактная фабрика

Каждую конкретную пиццу создает конкретная фабрика (PepperoniPizzaFactory, PepperoniPizzaFactory). Необходимо проконтролироватЬ, чтобы каждая из этих фабрик набрала все необходимые для пиццы типы продуктов. Для этого создается AbstractPizzaFactory (интерфейс или абстрактный класс).

Абстрактная фабрика объявляет методы

  • createMeat(),
  • createSauce(),
  • createCheeze(),
  • createAddition()
  • createDough().

Но конкретную реализацию она оставляет для конкретных фабрик. Таким образом, PepperoniPizzaFactory, наследующая от AbstractPizzaFactory ПиццаФабрики, не забудет создать мясо для пиццы, но право выбора этого мяса остается за ней.



Организация работы фабрик: index.js

Команда для запуска кода

npm run abstractFactory:pizza