Шаблоны проектирования
Сообщений: 10
• Страница 1 из 1
Что это такое?
По словам классика жанра К. Александра, "любой паттерн описывает задачу, которая снова и снова возникает в нашей работе, а также принцип ее решения, причем таким образом, что это решение можно потом использовать миллион раз, ничего не изобретая заново. Хотя сам классик имел в виду паттерны, возникающие при проектировании зданий и городов, так как был архитектором, Но его слова применимы и в отношении паттернов объектно-ориентированного проектирования. Итак паттерн (шаблон, образец) - это типичное решение типичной проблемы в данном контексте. И хотя наши решения выражаются в терминах классов, объектов, интерфейсов и операций, а не стен и дверей, но в любом случае смысл паттерна (шаблона, образца) - предложить решение определенной задачи в конкретном контексте.
В самом общем случае паттерн (шаблон, образец) состоит из четырех основных элементов:
1. Имя. Сославшись на него, мы можем сразу описать проблему проектирования, ее решение и их последствия. Присваивание паттернам (шаблонам, образцам) имен позволяет проектировать на более высоком уровне абстракции. С помощью словаря паттернов (шаблонов, образцов). (надоело, дальше буду использовать только слово паттерн) можно вести обсуждение в вашем коллективе, упоминать про них в документации, в тонкостях представлять дизайн системы. Подбор имен для паттернов ответственная задача, так как цитируя не менее известного персонажа: "Как вы яхту назовете, так она и поплывет".
2. Задача. Описание того, когда стоит применять паттерн. Необходимо сформулировать задачу и ее контекст. Вы можете описывать конкретную проблему проектирования, например способ представления алгоритмов в виде объектов. Иногда отмечается, какие структуры объектов свидетельствуют о негибком дизайне. Также может быть включен перечень условий, при выполнении которых стоит применять шаблон. Короче, надо знать когда, что и при каких условиях.
3. Решение. Описание элементов дизайна, отношений между ними, обязанностей каждого элемента. Конкретный дизайн или реализация не имеются в виду, ведь это паттерн - шаблон, который должен быть применим в различных ситуациях. Просто дается абстрактное (не путать с неполным или никаким) описание задачи проектирования и того, как она может быть решена с помощью некоторого весьма обобщенного сочетания элементов (естественно, классов, объектов и прочей объектно-ориентированной кухни).
4. Результаты - это следствия применения паттерна и разного рода компромиссы (к сожалению, нет ничего абсолютно идеального). Хотя при описании проектных решений о последствиях часто не упоминается, знать о них необходимо, хотя для того, чтобы можно было выбрать между различными вариантами и оценить преимущества и недостатки (а их иногда, немало) данного паттерна. В этом случае приходится вести и о выборе языка программирования для реализации. Поскольку в объектно-ориентированном проектировании повторное использование является важным фактором, то к результатам следует отнести и влияние на степень гибкости, расширяемости и переносимости системы. Перечисление всех последствий поможет вам понять и оценить их роль.
Подведем итоги. Паттерн проектирования именует, абстрагирует и идентифицирует ключевые аспекты структуры общего решения, которые и позволяют применить его для создания повторно используемого дизайна. Он выделяет участвующие классы и объекты, их роли и отношения, а также операции. При описании каждого паттерна внимание концентрируется на конкретной задаче объектно-ориентированного проектирования. Изучается. Когда следует применять паттерн, можно ли его использовать с учетом других ограничений проекта, каковы будут последствия его применения. А так как "суха теория мой друг, а древо жизни вечно зеленеет", в состав паттерна включается пример кода у буржуев на C++ (иногда на Smalltalk), у нас на любом объектно-ориентированном языке (например, ObjectPascal), иллюстрирующем его реализацию.
Короче, паттерны проектирования мощное, хотя и не абсолютное оружие. Добро пожаловать в библиотеку паттернов.
- Код: Выделить всё
Abstract Factory Абстракстная фабрика - паттерн, позволяющий изменять поведение системы, варьируя создаваемые объекты, при этом сохраняя интерфейсы.
Adapter Adapter - паттерн, позволяющий преобразовать интерфейс объекта к тому, который требует клиент.
Builder Builder - паттерн, позволяющий абстрагировать процесс создания комплексных систем, путем выделения и обобщения классов, отвечающих за создание частей.
Bridge Bridge - паттерн, позволяющий отделить интерфейс от реализации и изменять их независимо.
Command Command - паттерн, инкапсулирующий запрос как объект, позволяя более гибко работать с запросами (параметризовать, архивировать, наделять поведением).
Decorator Decorator - паттерн, позволяющий динамически добавлять обязанности объекту, путум включения его в "конверт", обладающий совместимым интерфейсом.
Facade Facade - паттерн, позволяющий скрыть сложность системы путем сведения всех возможных внешних вызовов к одному объекту, делигирующему их соответствующим объектам системы.
Flyweight Паттерн flyweight применяется, когда нужно поддерживать множество мелких объектов, в котором можно выделить группы схожих.
Interpreter Паттерин interpreter используется для создания интерпретаторов языков, для которых задана грамматика.
Iterator Iterator используется, когда нужно перебрать все элементы некоторого набора. Он реализует операцию перехода к следующему элементу и перехода к первому. При этом скрывается истинная структура размещения элементов набора.
Mediator Паттерн mediator обеспечивает создание "посредника" во взаимодействии объектов, тем самым обеспечивая слабое связывание.
Memento Memento - паттерн, реализующий механизм сохранения внутреннего состояния класса с возможностью последующего восстановления.
Observer Observer - паттерн, позволяющий создавать объекты, зависимые от данного и которые получают извещения при каждой смене состояния первичного объекта.
Prototype Позволяет создавать новые объекты за счет клонирования специального объекта - прототипа.
Proxy Proxy - предоставляет объект, контролирующий доступ к данному, перехватывая все вызовы к нему.
Singleton Позволяет классу контролировать существование только одного экземпляра и обеспечивает доступ к нему.
State State позволяет задавать поведение объекта "на лету".
Strategy Strategy инкапсулирует алгоритм как объект, позволяя заменять один на другой.
Template Method Реализует скелет алгоритма, в котором некоторые шаги делегируются подклассам.
Visitor Позволяет описать операцию, производимую над элементами некоторой структуры, позволяет добавлять новые операции, не изменяя класс структуры.
Описание этих и других паттернов выкладываю в архиве: [attachment=7301]
источник: (авторизуйтесь для просмотра ссылок)
[quote=Kent,Dec 11 2005, 03:59 AM]Это. Народ. Я вот тут на Кларионе пишу. Там механизма шаблонов нечто похожее из себя представляет. И реализован он уже черти сколько...
[/quote]
это относица ко всем языкам программирования основанных на ООП
а например синглтон использовал даже в PHP, хотя там модель ООП максимально кастрирована
[/quote]
это относица ко всем языкам программирования основанных на ООП
а например синглтон использовал даже в PHP, хотя там модель ООП максимально кастрирована
Сообщений: 10
• Страница 1 из 1
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1