Шаблон проектирования — это общее, многократно используемое решение часто возникающей проблемы в заданном контексте при проектировании программного обеспечения. Проще говоря, это способ, который был определен как правильный подход к решению общих проблем в коде. Если это все еще не имеет смысла, подумайте о том, что вы научились делить два числа в математике. Вам нужно следовать определенному шаблону, чтобы иметь возможность правильно получить решение, верно? И то, как я делю числа или учу их, когда был молодым, может даже отличаться от того, как вы учились, в зависимости от того, где вы это узнали, откуда или когда. Это именно то, чем является паттерн, способ решения проблемы.

Преимущества шаблонов проектирования

Основные преимущества, которые мы получаем от шаблонов проектирования, заключаются в следующем:

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

Структура шаблона проектирования

Вам может быть любопытно, как автор шаблона может подойти к описанию структуры, реализации и цели нового шаблона. Шаблон изначально представлен в виде правила, которое устанавливает связь между:

  • контекст
  • Система сил, которая возникает в этом контексте и
  • Конфигурация, которая позволяет этим силам разрешаться в контексте

Имея это в виду, давайте теперь взглянем на сводку элементов-компонентов шаблона проектирования. Шаблон проектирования должен иметь:

  • Название шаблона и описание
  • Контекстная схема — контексты, в которых шаблон эффективно отвечает потребностям пользователей.
  • Постановка проблемы — постановка проблемы, которая решается, чтобы мы могли понять назначение шаблона.
  • Решение — описание того, как решается проблема пользователя, в виде понятного списка шагов и восприятий.
  • Дизайн — описание дизайна шаблона и, в частности, поведения пользователя при взаимодействии с ним.
  • Реализация — руководство по реализации шаблона.
  • Иллюстрации — визуальное представление классов в шаблоне (например, диаграмма).
  • Примеры — реализация шаблона в минимальной форме.
  • Сопутствующие условия — какие еще шаблоны могут потребоваться для поддержки использования описываемого шаблона?
  • Отношения — на какие шаблоны похож этот шаблон? он близко имитирует любые другие?
  • Известное использование — используется ли шаблон в диких условиях? Если да, то где и как?
  • Обсуждения — мысли команды или автора о захватывающих преимуществах шаблона.

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

Типы шаблонов проектирования

Есть много разных шаблонов, и они делятся на три категории.

  1. Творчество, где эти шаблоны создают новые вещи.
  2. Структурный, где мы используем эти шаблоны для структурирования нашего кода.
  3. Поведенческий, где эти шаблоны используются для поведенческих целей.

Креативные шаблоны проектирования

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

Некоторые из популярных шаблонов проектирования в этой категории:

  • Фабрика
  • Абстрактная фабрика
  • Строитель
  • Прототип
  • Синглтон

Шаблоны структурного проектирования

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

Самые популярные модели в этой категории:

  • Адаптер
  • Мост
  • Композитный
  • Декоратор
  • Фасад
  • Наилегчайший вес
  • Прокси

Шаблоны поведенческого проектирования

Поведенческие паттерны сосредоточены на улучшении или упрощении связи между разрозненными объектами в системе.

Популярные примеры таких шаблонов:

  • Цепочка ответственности
  • Команда
  • Итератор
  • Медиатор
  • Сувениры
  • Наблюдатель
  • Состояние
  • Стратегия
  • Метод шаблона
  • Посетитель

Следующие шаги

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

Чтобы статья была относительно краткой, мы не будем больше приводить примеры. Для тех, кто заинтересован, большое вдохновение для этой статьи пришло из Learning JavaScript Design Patterns Эдди Османи. Я очень рекомендую эту книгу.

Для справки: https://addyosmani.com/resources/essentialjsdesignpatterns/book/#facadepatternjavascript