Этот метод определяет основные особенности общей структуры проектирования, что делает его полезным для создания повторно используемых объектно-ориентированных проектов.

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

Шаблоны обладают следующими свойствами;

  • решают поставленную задачу;
  • решение не очевидно;
  • решение доказательно;
  • описывают взаимосвязь.

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

В разных шаблонах имеются общие элементы:

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

Типичный шаблон проектирования кратко описывает все эти элементы и дает ясное представление об условиях и решении конкретного класса задач.