Шаблоны проектирования

Мир цифровых технологий
Site Admin
Аватара пользователя
Сообщения: 10082
Зарегистрирован: 26-04-2004

Сообщение KriG » 05-12-2005

Что это такое?

По словам классика жанра К. Александра, "любой паттерн описывает задачу, которая снова и снова возникает в нашей работе, а также принцип ее решения, причем таким образом, что это решение можно потом использовать миллион раз, ничего не изобретая заново. Хотя сам классик имел в виду паттерны, возникающие при проектировании зданий и городов, так как был архитектором, Но его слова применимы и в отношении паттернов объектно-ориентированного проектирования. Итак паттерн (шаблон, образец) - это типичное решение типичной проблемы в данном контексте. И хотя наши решения выражаются в терминах классов, объектов, интерфейсов и операций, а не стен и дверей, но в любом случае смысл паттерна (шаблона, образца) - предложить решение определенной задачи в конкретном контексте.
В самом общем случае паттерн (шаблон, образец) состоит из четырех основных элементов:
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]

источник: (авторизуйтесь для просмотра ссылок)

Госу Флудер
Сообщения: 2740
Зарегистрирован: 20-04-2004

Сообщение d'green » 05-12-2005

Респект, всем кто девелопит и не читал качать =)
ЗЫ Баян тоже качай,но пока не распаковывай =)

Site Admin
Аватара пользователя
Сообщения: 10082
Зарегистрирован: 26-04-2004

Сообщение KriG » 05-12-2005

ЗЗЫ Маша (любая =)), качай, распаковывай и изучай!!! =)

Госу Флудер
Сообщения: 2212
Зарегистрирован: 21-06-2005

Сообщение Shakawkaw » 05-12-2005

скачал но не распаковал страшно )

Spam Bot
Аватара пользователя
Сообщения: 3232
Зарегистрирован: 09-06-2005

Сообщение алая_лента » 10-12-2005

качаю)

Spam Bot
Аватара пользователя
Сообщения: 3243
Зарегистрирован: 31-10-2005

Сообщение Чучундра » 11-12-2005

скачала)

Баг Форума
Аватара пользователя
Сообщения: 7981
Зарегистрирован: 24-10-2004

Сообщение Kent » 11-12-2005

Это. Народ. Я вот тут на Кларионе пишу. Там механизма шаблонов нечто похожее из себя представляет. И реализован он уже черти сколько...

Site Admin
Аватара пользователя
Сообщения: 10082
Зарегистрирован: 26-04-2004

Сообщение KriG » 11-12-2005

[quote=Kent,Dec 11 2005, 03:59 AM]Это. Народ. Я вот тут на Кларионе пишу. Там механизма шаблонов нечто похожее из себя представляет. И реализован он уже черти сколько...

[/quote]
это относица ко всем языкам программирования основанных на ООП

а например синглтон использовал даже в PHP, хотя там модель ООП максимально кастрирована

Госу Флудер
Сообщения: 2740
Зарегистрирован: 20-04-2004

Сообщение d'green » 11-12-2005

Шаблоны это ИМХО просто решения задачи при помощи архитектуры =) Знание этих шаблонов просто позволяет человеку думать в данном направление более чётко.

Вернуться в Hi-Tech

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3