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