Паттерн (шаблон) проектирования – описание взаимодействия объектов и классов, адаптированных для решения общей задачи проектирования в конкретном контексте. Другими словами, паттерны – это некоторые обобщенные решения задач, часто встречающихся при проектировании информационных систем.
Паттерны не являются готовыми решениями для конкретной задачи. Они – обобщение опыта разработчиков при решении наиболее часто встречающихся проблем проектирования.
Паттерн состоит из следующих основных элементов:
Имя – ключевое слово (словосочетание), с помощью которого можно быстро описать ситуацию («проблема – решение – последствия»). Присваивание паттернам имен позволяет проектировать на более высоком уровне абстракции. С помощью словаря паттернов можно вести обсуждение с коллегами, упоминать паттерны в документации, в тонкостях представлять дизайн системы.
Задача (проблема) – описание того, когда следует применять паттерн. При этом может описываться конкретная проблема проектирования, например способ представления алгоритмов в виде объектов. Иногда отмечается, какие структуры классов или объектов свидетельствуют о негибком дизайне. Также может включаться перечень условий, при выполнении которых имеет смысл применять данный паттерн.
Решение – описание того, как проблема может быть решена в обобщенных терминах. Описание элементов дизайна, отношений между ними, функций каждого элемента. Конкретный дизайн или реализация не имеются в виду, поскольку паттерн – это шаблон, применимый в самых разных ситуациях. Просто дается абстрактное описание задачи проектирования и того, как она может быть решена с помощью некоего весьма обобщенного сочетания элементов (классов и объектов).
Результаты (последствия) – хорошее и плохое, типично возникающее в результате применения паттерна, возможные компромиссы. Знать о последствиях принимаемого решения необходимо, чтобы можно было выбрать между различными вариантами и оценить преимущества и недостатки данного паттерна.