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

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

Автор шаблонов проектирования обычно предоставляет документацию. Структура обычно состоит из:

  • Термин: это описание
  • Намерение: описывает, для чего используется шаблон.
  • Мотивация: дает представление о том, как шаблон решает проблему.
  • Структура: примеры диаграмм и классов, которые показывают, как части шаблона соотносятся друг с другом.
  • Код: пример того, как будет выглядеть шаблон, скорее всего, на популярном языке программирования.

Зачем использовать шаблоны проектирования?

  • Шаблоны — это проверенные решения, которые помогают программистам ускорить процесс разработки.
  • Шаблоны помогают реализовать принцип DRY (не повторяйтесь)
  • Улучшает читаемость кода, особенно если другой разработчик просматривает ваш код.
  • Шаблоны обучения могут дать представление о том, как решать проблемы с использованием объектно-ориентированных принципов.

Однако у шаблонов проектирования есть несколько недостатков.

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

Некоторые программисты предположили, что шаблоны — это всего лишь обходной путь. Например, Питер Норвиг, автор книги «Шаблоны проектирования в динамических языках», заявил, что шаблоны полезны только потому, что в языках нет функций для уменьшения сложности.

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