js-design-patterns
Паттерны проектирования в JavaScript
Краткое руководство-шпаргалка с примерами кода.
Порождающие
Конструктор
Конструктор - это специальный метод, используемый для инициализации вновь созданного объекта после выделения для него памяти. В ES2015+ в JavaScript появился синтаксис для создания классов с помощью конструкторов. Это позволяет создавать объекты как экземпляры класса с использованием конструктора по умолчанию.
Модуль
Модули - являются неотъемлемой частью архитектуры любого надежного приложения и как правило, помогают четко разделять и упорядочивать блоки кода проекта.
В классическом JavaScript было несколько вариантов реализации модулей, таких как:
- Объектно-буквенная запись
- Шаблон модуля
- Модули AMD
- Модули CommonJS
Раскрывающий модуль
Раскрывающий модуль - тоже что и модуль, только в нем все функции и переменные определены в приватной области видимости и экспортируется анонимный объект с указателями на приватную функциональность, которую необходимо сделать открытой (раскрыть).
Благодаря современному способу реализации модулей в ES2015+, набор функций и переменных, определенных в модуле, уже является приватными. Кроме того, мы используем экспорт и импорт для раскрытия всего, что необходимо.
Синглтон
Синглтон - это шаблон проектирования, который ограничивает создание экземпляра класса одним объектом. Это полезно, когда для координации действий в системе требуется только один объект.
Классически вы можете реализовать шаблон синглтон, создав класс с помощью метода, который создает новый экземпляр класса, только если он еще не существует. Если экземпляр уже существует, он просто возвращает ссылку на этот объект.
Прототип
Прототип - это шаблон, который создает объекты на основе существующего объекта путем клонирования.
Прототипа основан на наследовании прототипов, при котором мы создаем объекты, которые служат прототипами для других объектов. Объект-прототип эффективно используется в качестве схемы для каждого объекта, создаваемого конструктором.
Одно из преимуществ использования Прототипа заключается в том, что мы работаем с преимуществами прототипа, которые JavaScript может предложить изначально, а не пытаемся имитировать функции других языков.
Шаблон является не только простым способом реализации наследования, но и позволяет повысить производительность. При определении функций в объекте все они создаются по ссылке (поэтому все дочерние объекты указывают на одни и те же функции), вместо того чтобы создавать отдельные копии.
Фабрика
Фабрика - это еще один шаблон создания объектов. Он отличается от других шаблонов тем, что явно не требует от нас использования конструктора. Вместо этого фабрика может предоставлять общий интерфейс для создания объектов, в котором мы можем указать тип объекта, который мы хотим создать.
Представьте себе фабрику пользовательского интерфейса, где мы хотим создать
тип компонента пользовательского интерфейса. Вместо того, чтобы создавать этот
компонент напрямую, используя оператор или другую конструкцию,
мы запрашиваем у объекта фабрики новый компонент. Мы сообщаем фабрике, какой
тип объекта требуется (например, 'Кнопка', 'Панель'), и она создает экземпляр
и возвращает его нам для использования.
Это особенно удобно, если процесс создания объекта относительно сложен, например, если он сильно зависит от динамических факторов или конфигурации приложения.
Абстрактная фабрика
Абстрактная фабрика - инкапсулирует группу фабрик схожих по типу создаваемых объектов.
Вы можете использовать абстрактную фабрику, когда система должна быть независимой от того, как создаются объекты, или когда ей необходимо работать с несколькими типами объектов.
Структурные
Структурные шаблоны проектирования имеют дело с компоновкой классов и объектов.
Например, концепция наследования позволяет нам создавать интерфейсы и объекты таким образом, чтобы они могли получать новую функциональность.
Структурные шаблоны предоставляют более лучшие методы и практики для организации классов и объектов.
Фасад
Фасад - предоставляет удобный высокоуровневый интерфейс, скрывая всю сложность реализации. Это упрощенный API, для сложной системы, которая может состоять из нескольких модулей или приложений.
Фасад можно также использовать с другими шаблонами, такими как модуль.
Миксин
Миксин - это класс, предлагающий функциональность (методы), которую подкласс или группа подклассов могут легко унаследовать.