Чтобы повторно воспользоваться дизайном, необходимо документировать решения, альтернативные варианты и компромиссы, которые привели к нему. Важны также конкретные примеры, поскольку они позволяют увидеть применение паттерна.
- Название и классификация паттерна. Название паттерна должно четко отражать его назначение.
- Назначение. Лаконичный ответ на следующие вопросы: каковы функции паттерна, его обоснование и назначение, какую конкретную задачу проектирования можно решить с его помощью.
- Известен также под именем. Другие распространенные названия паттерна, если таковые имеются.
- Мотивация. Сценарий, иллюстрирующий задачу проектирования и то, как она решается данной структурой класса или объекта. Благодаря мотивации можно лучше понять последующее, более абстрактное описание паттерна.
- Применимость. Описание ситуаций, в которых можно применять данный паттерн. Примеры проектирования, которые можно улучшить с его помощью. Распознавание таких ситуаций.
- Структура. Графическое представление классов в паттерне с использованием нотации, основанной на методике Object Modeling Technique (OMT). Мы пользуемся также диаграммами взаимодействий для иллюстрации последовательностей запросов и отношений между объектами.
- Участники. Классы или объекты, задействованные в данном паттерне проектирования, и их функции.
- Отношения. Взаимодействие участников для выполнения своих функций.
- Результаты. Насколько паттерн удовлетворяет поставленным требованиям? Результаты применения, компромиссы, на которые приходится идти. Какие аспекты поведения системы можно независимо изменять, используя данный паттерн?
- Реализация. Сложности и так называемые подводные камни при реализации паттерна. Советы и рекомендуемые приемы. Есть ли у данного паттерна зависимость от языка программирования?
- Пример кода. Фрагмент кода, иллюстрирующий вероятную реализацию на языках C++ или Smalltalk.
- Известные применения. Возможности применения паттерна в реальных системах. Даются, по меньшей мере, два примера из различных областей.
- Родственные паттерны. Связь других паттернов проектирования с данным. Важные различия. Использование данного паттерна в сочетании с другими.