Шаблон проектирования: различия между версиями
[непроверенная версия] | [непроверенная версия] |
→Структурные шаблоны (Structural): дополнение |
|||
Строка 61: | Строка 61: | ||
=== Структурные шаблоны (Structural) === |
=== Структурные шаблоны (Structural) === |
||
Структурные шаблоны — шаблоны проектирования, которые определяют различные сложные структуры, которые |
Структурные шаблоны — шаблоны проектирования, которые определяют различные сложные структуры, которые изменяют интерфейс уже существующих объектов или его реализацию , позволяя облегчить разработку и оптимизировать программу. |
||
* [[Адаптер (шаблон проектирования)|Adapter/Адаптер]] или Wrapper/Обёртка - объект, обеспечивающий взаимодействие двух других объектов, один из которых использует, а другой предоставляет, несовместимый с первым, интерфейс. |
* [[Адаптер (шаблон проектирования)|Adapter/Адаптер]] или Wrapper/Обёртка - объект, обеспечивающий взаимодействие двух других объектов, один из которых использует, а другой предоставляет, несовместимый с первым, интерфейс. |
||
* [[Мост (шаблон проектирования)|Bridge/Мост]] - структура, позволяющая изменять интерфейс обращения и интерфейс реализации класса независимо. |
* [[Мост (шаблон проектирования)|Bridge/Мост]] - структура, позволяющая изменять интерфейс обращения и интерфейс реализации класса независимо. |
Версия от 06:22, 29 апреля 2010
Шаблон проектирования, Паттерн (англ. design pattern) — это многократно применяемая архитектурная конструкция, предоставляющая решение общей проблемы проектирования в рамках конкретного контекста и описывающая значимость этого решения. Паттерн не является законченным образцом проекта, который может быть прямо преобразован в код.
Это описание или образец для того, как решить задачу таким образом, чтобы это можно было использовать в различных ситуациях. Объектно-ориентированные шаблоны зачастую показывают отношения и взаимодействия между классами или объектами, без определения того, какие конечные классы или объекты приложения будут использоваться.
Алгоритмы по своей сути также являются шаблонами, но не проектирования, а вычисления, так как решают вычислительные задачи. В отличие же от идиом, шаблоны проектирования независимы от применяемого языка программирования.
Архитектура
В 1970-е годы архитектор шаблон не поддерживает такой синтаксис составил набор шаблонов проектирования. В области архитектуры эта идея не получила такого развития, как позже в области программной разработки.
Проектирование компьютерных программ
История
В 1987 году Кент Бэк (Kent Beck) и Вард Каннигем (Ward Cunningham) взяли идеи Александра и разработали шаблоны применительно к разработке программного обеспечения для разработки графических оболочек на языке Smalltalk.
В 1988 году Эрих Гамма (Erich Gamma) начал писать докторскую диссертацию при цюрихском университете об общей переносимости этой методики на разработку программ.
В 1989—1991 годах Джеймс Коплин (James Coplien) трудился над разработкой идиом для программирования на C++ и опубликовал в 1991 году книгу Advanced C++ Idioms.
В этом же году Эрих Гамма заканчивает свою докторскую диссертацию и переезжает в США, где в сотрудничестве с Ричардом Хелмом (Richard Helm), Ральфом Джонсоном (Ralph Johnson) и Джоном Влиссидсом (John Vlissides) публикует книгу Design Patterns — Elements of Reusable Object-Oriented Software. В этой книге описаны 23 шаблона проектирования. Также команда авторов этой книги известна общественности под названием Банда четырёх (англ. Gang of Four, часто сокращается до GoF). Именно эта книга стала причиной роста популярности шаблонов проектирования.
Польза
Главная польза каждого отдельного шаблона состоит в том, что он описывает решение целого класса абстрактных проблем. Также тот факт, что каждый шаблон имеет свое имя, облегчает дискуссию об абстрактных структурах данных (ADT) между разработчиками, так как они могут ссылаться на известные шаблоны. Таким образом, за счёт шаблонов производится унификация терминологии, названий модулей и элементов проекта.
Правильно сформулированный шаблон проектирования позволяет, отыскав удачное решение, пользоваться им снова и снова.
Критика
Иногда шаблоны консервируют громоздкую и малоэффективную систему понятий, разработанную узкой группой. Когда количество шаблонов возрастает, превышая критическую сложность, исполнители начинают игнорировать шаблоны и всю систему, с ними связанную.
Нередко шаблонами заменяется отсутствие или недостаточность документации в сложной программной среде.
Есть мнение, что слепое применение шаблонов из справочника, без осмысления причин и предпосылок выделения каждого отдельного шаблона, замедляет профессиональный рост программиста, так как подменяет творческую работу механическим подставлением шаблонов. Люди, придерживающиеся данного мнения, считают, что знакомиться со списками шаблонов надо тогда, когда «дорос» до них в профессиональном плане — и не раньше. Хороший критерий нужной степени профессионализма — выделение шаблонов самостоятельно, на основании собственного опыта. При этом, разумеется, знакомство с теорией, связанной с шаблонами, полезно на любом уровне профессионализма и направляет развитие программиста в правильную сторону. Сомнению подвергается только использование шаблонов «по справочнику».
Шаблоны могут пропагандировать плохие стили разработки приложений, и зачастую слепо применяются.
Для преодоления этих недостатков используется рефакторинг.
Основные типы шаблонов проектирования
Основные шаблоны (Fundamental)
- Delegation pattern/Шаблон делегирования
- Functional design/Шаблон функционального дизайна
- Immutable/Неизменяемый объект
- Interface
- Marker interface
- Property Container
Порождающие шаблоны проектирования (Creational)
- Abstract Factory/Абстрактная фабрика — класс, который представляет собой интерфейс для создания компонентов системы.
- Builder/Строитель — класс, который представляет собой интерфейс для создания сложного объекта.
- Factory Method/Фабричный метод — определяет интерфейс для создания объекта, но оставляет подклассам решение о том, какой класс инстанциировать.
- Lazy initialization/Отложенная инициализация — объект, инициализируемый во время первого обращения к нему.
- Multiton
- Object Pool/Объектный пул — класс, который представляет собой интерфейс для работы с набором инициализированных и готовых к использованию объектов.
- Prototype/Прототип — определяет интерфейс создания объекта через клонирование другого объекта вместо создания через конструктор.
- Resource acquisition is initialization (RAII)/Получение ресурса есть инициализация — получение некоторого ресурса совмещается с инициализацией, а освобождение — с уничтожением объекта.
- Singleton/Одиночка — класс, который может иметь только один экземпляр.
Структурные шаблоны (Structural)
Структурные шаблоны — шаблоны проектирования, которые определяют различные сложные структуры, которые изменяют интерфейс уже существующих объектов или его реализацию , позволяя облегчить разработку и оптимизировать программу.
- Adapter/Адаптер или Wrapper/Обёртка - объект, обеспечивающий взаимодействие двух других объектов, один из которых использует, а другой предоставляет, несовместимый с первым, интерфейс.
- Bridge/Мост - структура, позволяющая изменять интерфейс обращения и интерфейс реализации класса независимо.
- Composite/Компоновщик - объект, который объединяет в себе объекты, подобные ему самому.
- Decorator/Декоратор - класс, расширяющий функционал другого класса, без использования наследования.
- Facade/Фасад - объект, который абстрагирует работу с несколькими классами, объединяя их в единое целое.
- Flyweight/Приспособленец - это объект, представляющий себя как уникальный экземпляр в разных местах программы, но по факту не являющийся таковым.
- Proxy/Заместитель - объект, который является посредником между двумя другими объектами, и который реализовывает/ограничивает доступ к объекту, к которому обращаются через него.
Поведенческие шаблоны (Behavioral)
- Chain of Responsibility/Цепочка ответственности
- Command/Команда, Action, Transaction
- Interpreter/Интерпретатор
- Iterator/Итератор, Cursor
- Mediator/Посредник
- Memento/Хранитель, Token
- Observer/Наблюдатель, Dependents, Publish-Subscribe, Listener
- State/Состояние, Objects for States
- Strategy/Стратегия
- Template Method/Шаблонный метод
- Visitor/Посетитель
- Simple Policy
- Specification
- Event listener
- Single-serving visitor
- Hierarchical visitor
Шаблоны параллельного программирования (Concurrency)
- Active Object
- Balking
- Double checked locking/Блокировка с двойной проверкой
- Guarded suspension
- Half-Sync/Half-Async
- Leaders/followers
- Monitor Object
- Reactor
- Read write lock
- Scheduler/Планировщик
- Thread pool
- Thread-Specific Storage
- Single Thread Execution/Однопоточное выполнение
MVC
- Model-View-Controller (MVC) Модель-представление-контроллер
- Model-View-Presenter
- Presentation-Abstraction-Control
Enterprise
- Business Delegate
- Composite Entity/Составная Сущность
- Composite View
- DAO (Data Access Object) Объект Доступа к Данным
- Dispatcher View
- Front Controller
- Intercepting Filter
- Service Activator
- Service Locator/Локатор Службы
- Service to Worker
- Session Facade/Фасад Сессии
- Transfer Object Assembler
- Transfer Object/Объект Перемещения
- Value List Handler/Обработчик Списка Значений
- View Helper
Unsorted
Другие типы шаблонов
Также на сегодняшний день существует ряд других шаблонов:
- Carrier Rider Mapper, предоставление доступа к хранимой информации
- аналитические шаблоны, описывают основной подход для составления требований для программного обеспечения (requirement analysis) до начала самого процесса программной разработки
- коммуникационные шаблоны, описывают процесс общения между отдельными участниками/сотрудниками организации
- организационные шаблоны, описывают организационную иерархию предприятия/фирмы
- Анти-паттерны (Anti-Design-Patterns) описывают как не следует поступать при разработке программ, показывая характерные ошибки в дизайне и в реализации.
См. также
Примечания
Литература
- Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес. Приемы объектно-ориентированного проектирования. Паттерны проектирования = Design Patterns: Elements of Reusable Object-Oriented Software. — СПб.: «Питер», 2007. — С. 366. — ISBN 978-5-469-01136-1. (также ISBN 5-272-00355-1)
- Крэг Ларман. Применение UML 2.0 и шаблонов проектирования = Applying UML and Patterns : An Introduction to Object-Oriented Analysis and Design and Iterative Development. — М.: «Вильямс», 2006. — С. 736. — ISBN 0-13-148906-2.
- Мартин Фаулер. Архитектура корпоративных программных приложений = Patterns of Enterprise Application Architecture (Addison-Wesley Signature Series). — М.: «Вильямс», 2007. — С. 544. — ISBN 0-321-12742-0.
- Джошуа Кериевски. Рефакторинг с использованием шаблонов (паттернов проектирования) = Refactoring to Patterns (Addison-Wesley Signature Series). — М.: «Вильямс», 2006. — С. 400. — ISBN 0-321-21335-1.
- Скотт В. Эмблер, Прамодкумар Дж. Садаладж. Рефакторинг баз данных: эволюционное проектирование = Refactoring Databases: Evolutionary Database Design (Addison-Wesley Signature Series). — М.: «Вильямс», 2007. — С. 368. — ISBN 0-321-29353-3.
Ссылки
- Ольга Дубина. Обзор паттернов проектирования . — Обзор нескольких наиболее значительных монографий, посвященных паттернам проектирования информационных систем. Дата обращения: 5 сентября 2006.
- Каталог шаблонов J2EE
- Один из многих сайтов с шаблонами проектирования на Perl
- Portland Pattern Repository — список шаблонов проектирования на движке вики
- mgrand’s book — сайт с описанием большого количества шаблонов проектирования
- Каталог шаблонов на сайте Hillside.net
- Структурные шаблоны проектирования в XML
- Resign Patterns — проломы проектно-дизориентированного проектирования (пародия на паттерны)
- Eclipse’s Culture of Shipping (англ.) Erich Gamma
- PHP Design Patterns Reference and Examples
- Шаблоны проектирования на design-pattern.ru
Это заготовка статьи по информатике. Помогите Википедии, дополнив её. |
Для улучшения этой статьи желательно:
|