Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
9.
Паттерн проектирования именует, мотивирует и объясняет конкретный прием проектирования, который относится к задаче, часто возникающей при работе над объектно-ориентированными системами. Паттерн описывает задачу, ее решение, область применимости этого решения и его результаты. Он также содержит рекомендации по реализации и примеры. Под решением понимается схема организации объектов и классов, позволяющая справиться с проблемой. Паттерн адаптируется для работы в конкретных условиях и реализуется в заданном контексте.
В общем случае паттерн состоит из четырех основных элементов:
Классификация паттернов:
Порождающие паттерны
Паттерн Abstract Factory
Паттерн Builder
Паттерн Factory Method
Паттерн Prototype
Паттерн Singleton
Структурные паттерны
Паттерн Adapter
Паттерн Bridge
Паттерн Composite
Паттерн Decorator
Паттерн Facade
Паттерн Flyweight
Паттерн Proxy
Паттерны поведения
Паттерн Chain of Responsibility
Паттерн Command
Паттерн Interpreter
Паттерн Iterator
Паттерн Mediator
Паттерн Memento
Паттерн Observer
Паттерн State
Паттерн Strategy
Паттерн Template Method
Паттерн Visitor
Как мы будем описывать паттерны проектирования? Графических обозначений недостаточно. Они просто символизируют конечный продукт процесса проектирования в виде отношений между классами и объектами. Чтобы повторно воспользоваться дизайном, нам необходимо документировать решения, альтернативные варианты и компромиссы, которые привели к нему. Важны также конкретные примеры, поскольку они позволяют увидеть применение паттерна.
При описании паттернов проектировании мы будем придерживаться единого принципа. Описание каждого паттерна разбито на разделы, перечисленные ниже. Такой подход позволяет единообразно представить информацию, облегчает изучение, сравнение и применение паттернов.
Название и классификация паттерна
Название паттерна должно четко отражать его назначение. Классификация паттернов проводится в соответствии со схемой, которая изложена в разделе 1.5.
Назначение
Лаконичный ответ на следующие вопросы: каковы функции паттерна, его обоснование и назначение, какую конкретную задачу проектирования можно решить с его помощью.
Известен также под именем
Другие распространенные названия паттерна, если таковые имеются.
Мотивация
Сценарий, иллюстрирующий задачу проектирования и то, как она решается данной структурой класса или объекта. Благодаря мотивации можно лучше понять последующее, более абстрактное описание паттерна.
Применимость
Описание ситуаций, в которых можно применять данный паттерн. Примеры проектирования, которые можно улучшить с его помощью. Распознавание таких ситуаций.
Структура
Графическое представление классов в паттерне с использованием нотации, основанной на методике Object Modeling Technique (OMT) [RBP+91]. Мы пользуемся также диаграммами взаимодействий [JCJO92, Воо94] для иллюстрации последовательностей запросов и отношений между объектами. В приложении B эта нотация описывается подробно.
Участники
Классы или объекты, задействованные в данном паттерне проектирования, и их функции.
Отношения
Взаимодействие участников для выполнения своих функций.
Результаты
Насколько паттерн удовлетворяет поставленным требованиям? Результаты применения, компромиссы, на которые приходится идти. Какие аспекты поведения системы можно независимо изменять, используя данный паттерн?
Реализация
Сложности и так называемые подводные камни при реализации паттерна. Советы и рекомендуемые приемы. Есть ли у данного паттерна зависимость от языка программирования?
Пример кода
Фрагмент кода, иллюстрирующий вероятную реализацию на языках C++ или Smalltalk.
Известные применения
Возможности применения паттерна в реальных системах. Даются, по меньшей мере, два примера из различных областей.
Родственные паттерны
Связь других паттернов проектирования с данным. Важные различия. Использование данного паттерна в сочетании с другими.
В приложениях содержится информация, которая поможет вам лучше понять паттерны и связанные с ними вопросы. Приложение A представляет собой глоссарий употребляемых нами терминов. В уже упомянутом приложении B дано описание разнообразных нотаций. Некоторые аспекты применяемой нотации мы поясняем по мере ее появления в тексте книги. Наконец, в приложении C приведен исходный код базовых классов, встречающихся в примерах.