Позволяют организовать код в ООП стиле, когда необходимо взаимодействие классов.
https://www.youtube.com/watch?v=YJVj4XNASDk
- Паттерны создания новых классов
КОНСТРУКТОР - создание нового класса
ФАБРИКА - позволяет создавать класс, который создает данные, беря подходящий для этого класс. Используем, когда есть несколько классов со схожей функциональностью, но при этом меняется один из входных даннных.
ПРОТОТИП - используется для генерации объектов на основе других объектов, когда один из полей объекта должен быть уникальным или динамическим.
СИНГЛТОН - если в приложении м.б. только 1 единственный класс. И при каждом создании его инстанса, мы будет всегда возвращать данные, переданные в первый инстанс. Например, класс для соединения с БД.
- Структурные - для работы с уже существующими классами.
АДАПТЕР - позволяет интегрировать старый и новый интерфейс, не ломая приложение. Путём комбинирования функциональности. Например, если они делают одно и то же, но по разному. Позволяет работать с версиями API.
ДЕКОРАТОР - функции, принимающие инстанс класса, модифицирующий его и возвращающий его обратно. Позволяет дополнить класс функциональностью.
ФАСАД - вызывает классы и реализовывает их функциональность в зависимости от разных условий. Например - регистрация жалобы в зависимости от её типа.
FLYWEIGHT - паттерн для загрузки и и кеширования данных. Не даст повторно создать объект с тем же ключом и вернет прежний. Позволяет не создавать дублей данных (кеширование)
PROXY - также для кеширования данных, но при помощи встроенного в JS объекта Proxy.
- Поведенческие, позволяющие организовать взаимодействие классов разного типа
CHAIN_OF_RESPONSIBILITIES - позволяет последовательно модифицировать и вызывать методы другого класса.(как в jquery)
COMAND - класс, позволяющий управлять методами и св-вами другого класса через свои методы.
ИТЕРАТОР - повзоляет повторно вызывать метод класса с каждым переданым в него аргументом. Принимает массив аргументов. Использует Symbol.iterator
МЕДИАТОР - повзоляет обмениваться данными между классами, создавая для этого спец. класс.
OBSERVER - классы подписываются на этот класс-observer, и он триггерит тот или иной класс, вызывая их опред. метод. Также можно передать payload. (др. нзвания - listener, dispatcher)
STATE - повзоляет создать класс, который управляет состонием набора классов, описывая логику черз сои методы.
STRATEGY - создает "оболочку" для набора классов, вызывающую тот или иной их метод/св-во в зависимости от переданного при вызове в "оболочку" класса.
TEMPLATE - класс, который описывает определенный алгоритм и структуру, делегируя реализацию дочерним классам.