Книжный каталог

Паттерны проектирования

Перейти в магазин

Сравнить цены

Описание

В мире постоянно кто-то сталкивается с такими же проблемами программирования, которые возникают и у вас. Многие разработчики решают совершенно идентичные задачи и находят похожие решения. Если вы не хотите изобретать велосипед, используйте готовые шаблоны (паттерны) проектирования, работе с которыми посвящена эта книга. Паттерны появились, потому что многие разработчики искали пути повышения гибкости и степени повторного использования своих программ. Найденные решения воплощены в краткой и легко применимой на практике форме. Особенностью данного издания является уникальный способ подачи материала, выделяющий серию "Head First" издательства O'Reilly в ряду множества скучных книг, посвященных программированию. Книга будет интересна широкому кругу веб-разработчиков, от начинающих до профессионалов, желающих освоить работу с паттернами проектирования.

Сравнить Цены

Предложения интернет-магазинов
Паттерны проектирования на платформе .NET Паттерны проектирования на платформе .NET 601 р. piter.com В магазин >>
Фримен Э. и др. Паттерны проектирования Фримен Э. и др. Паттерны проектирования 1045 р. chitai-gorod.ru В магазин >>
Тепляков С. Паттерны проектирования на платформе .NET Тепляков С. Паттерны проектирования на платформе .NET 630 р. chitai-gorod.ru В магазин >>
Сергей Тепляков Паттерны проектирования на платформе .NET Сергей Тепляков Паттерны проектирования на платформе .NET 639 р. ozon.ru В магазин >>
Сергей Тепляков Паттерны проектирования на платформе .NET Сергей Тепляков Паттерны проектирования на платформе .NET 546 р. litres.ru В магазин >>
Паттерны проектирования на платформе .NET Паттерны проектирования на платформе .NET 601 р. piter.com В магазин >>
Фримен Э., Робсон Э. Head First. Паттерны проектирования. Обновленное юбилейное издание Фримен Э., Робсон Э. Head First. Паттерны проектирования. Обновленное юбилейное издание 980 р. chitai-gorod.ru В магазин >>

Статьи, обзоры книги, новости

Введение в паттерны (шаблоны) проектирования

Введение в паттерны проектирования Что такое паттерны

При создании программных систем перед разработчиками часто встает проблема выбора тех или иных проектных решений. В этих случаях на помощь приходят паттерны. Дело в том, что почти наверняка подобные задачи уже решались ранее и уже существуют хорошо продуманные элегантные решения, составленные экспертами. Если эти решения описать и систематизировать в каталоги, то они станут доступными менее опытным разработчикам, которые после изучения смогут использовать их как шаблоны или образцы для решения задач подобного класса. Паттерны как раз описывают решения таких повторяющихся задач.

Концепция создания программного обеспечения с использованием паттернов, несомненно, очень важная, но относительно молодая, быть может, поэтому до сих пор нет четкого определения, что же такое паттерн. Об этом свидетельствуют непрекращающиеся дискуссии в популярной литературе и на соответствующих форумах в сети.

Например, следует ли считать алгоритмы и структуры данных паттернами? По этому вопросу существуют противоположные мнения. Согласно одному из них, алгоритмы являются вычислительными паттернами, а хорошо известная фундаментальная монография Дональда Кнута "Искусство программирования" по сути, представляет собой каталог таких паттернов. Согласно другому мнению, алгоритмы не являются паттернами, так как решаемые ими проблемы слишком малы (оперируют такими понятиями как вычислительная сложность и потребление ресурсов), а область решения хорошо очерчена. Паттерны же решают проблемы большего масштаба, при этом паттерн дает не конкретное решение, а некий путь к решению, причем, выбор правильного паттерна - задача нетривиальная, предполагающая от архитектора наличие интуиции, опыта, определенного творчества.

Немного истории

Впервые, в конце 1970-х годов Кристофером Александром был разработан каталог паттернов, предназначенных для проектирования зданий и городов [1]. В конце 1980-х годов Кент Бек и Вард Каннингем попытались перенести идеи Александра в область разработки ПО, составив 5 небольших паттернов для проектирования пользовательских интерфейсов на языке Smalltalk. В 1989 Джеймс Коплиен в целях обучения С++ внутри компании AT&T составил каталог идиом С++ (разновидность паттернов, специфичных для языка программирования), а в 1991 на его основе вышла в свет книга "Advanced C++ Programming Styles and Idioms" (имеется русский перевод [7]).

Однако по настоящему популярным применение паттернов в индустрии разработки программного обеспечения стало после того, как в 1994 был опубликован каталог, включающий 23 паттерна объектно-ориентированного проектирования [5]. Этот каталог настолько популярен, что часто упоминается как паттерны GoF ("Gang of Four" или "банда четырех" по числу авторов).

В настоящее время паттерны продолжают непрерывно развиваться. Появляются новые паттерны, категории и методы их описания.

Классификация паттернов

В силу популярности каталога GoF часто под паттернами проектирования подразумевают все виды паттернов программной индустрии, что является не совсем корректным. В области разработки программных систем существует множество паттернов, которые отличаются областью применения, масштабом, содержимым, стилем описания. Например, в зависимости от сферы применения существуют такие паттерны как паттерны анализа, проектирования, тестирования, документирования, организации процесса разработки, планирования проектов и другие.

В настоящее время наиболее популярными паттернами являются паттерны проектирования. Одной из распространенных классификаций таких паттернов является классификация по степени детализации и уровню абстракции рассматриваемых систем. Согласно [2], паттерны проектирования программных систем делятся на следующие категории:

  • Архитектурные паттерны
  • Паттерны проектирования
  • Идиомы

Архитектурные паттерны, являясь наиболее высокоуровневыми паттернами, описывают структурную схему программной системы в целом. В данной схеме указываются отдельные функциональные составляющие системы, называемые подсистемами, а также взаимоотношения между ними. Примером архитектурного паттерна является хорошо известная программная парадигма "модель-представление-контроллер" (model-view-controller - MVC).

В свою очередь, подсистемы могут состоять из архитектурных единиц уровнем ниже. Паттерны проектирования описывают схемы детализации программных подсистем и отношений между ними, при этом они не влияют на структуру программной системы в целом и сохраняют независимость от реализации языка программирования. Паттерны GoF относятся именно к этой категории. Согласно [5], под паттернами проектирования объектно-ориентированных систем понимается описание взаимодействия объектов и классов, адаптированных для решения общей задачи проектирования в конкретном контексте.

В русскоязычной литературе обычно встречаются несколько вариантов перевода оригинального названия design patterns - паттерны проектирования, шаблоны проектирования, образцы. Здесь в основном используется первый вариант, иногда второй.

Идиомы, являясь низкоуровневыми паттернами, имеют дело с вопросами реализации какой-либо проблемы с учетом особенностей данного языка программирования. При этом часто одни и те же идиомы для разных языков программирования выглядят по-разному или не имеют смысла вовсе. Например, в C++ для устранения возможных утечек памяти могут использоваться интеллектуальные указатели. Интеллектуальный указатель содержит указатель на участок динамически выделенной памяти, который будет автоматически освобожден при выходе из зоны видимости. В среде Java такой проблемы просто не существует, так как там используется автоматическая сборка мусора. Обычно, для использования идиом нужно глубоко знать особенности применяемого языка программирования.

Следует отметить, что в программной области существуют и другие виды паттернов, не относящиеся к проектированию вообще, например, паттерны анализа, тестирования, документирования и др.

Описание паттернов

Задача каждого паттерна - дать четкое описание проблемы и ее решения в соответствующей области. Для этого могут использоваться разные форматы описаний от художественно-описательного [1] до строгого, академического [5]. В общем случае описание паттерна всегда содержит следующие элементы:

  1. Название паттерна. Представляет собой уникальное смысловое имя, однозначно определяющее данную задачу или проблему и ее решение.
  2. Решаемая задача. Здесь дается понимание того, почему решаемая проблема действительно является таковой, четко описывает ее границы.
  3. Решение. Здесь указывается, как именно данное решение связано с проблемой, приводится пути ее решения.
  4. Результаты использования паттерна. Обычно приводятся достоинства, недостатки и компромиссы.

Результаты применения паттернов

Один из соавторов GoF, Джон Влиссидес [4] приводит следующие преимущества применения паттернов проектирования:

  1. Они (паттерны) позволяют суммировать опыт экспертов и сделать его доступным рядовым разработчикам.
  2. Имена паттернов образуют своего рода словарь, который позволяет разработчикам лучше понимать друг друга.
  3. Если в документации системы указано, какие паттерны в ней используются, это позволяет читателю быстрее понять систему.
  4. Паттерны упрощают реструктуризацию системы независимо от того, использовались ли паттерны при ее проектировании.

Правильно выбранные паттерны проектирования позволяют сделать программную систему более гибкой, ее легче поддерживать и модифицировать, а код такой системы в большей степени соответствует концепции повторного использования.

Используемая литература

При подготовке материалов из раздела Design Patterns использовалась следующая литература:

  1. Alexander С., Ishikawa S., Silverstein M. A Pattern Language: Towns, Buildings, Construction. Oxford University Press, 1977.
  2. Buschmann F., Meunier R., Rohnert H., Sommerlad P., Stal M. Pattern-Oriented Software Architecture, Volume 1, A System of Patterns. Wiley, 1996, 476 pages
  3. Александреску А. Современное проектирование на C++ (серия C++ in Depth). - М.: Издательский дом "Вильямс", 2008.-336с
  4. Влиссидес Дж. Применение шаблонов проектирования. Дополнительные штрихи. - М.: Издательский дом "Вильямс", 2003.-144с
  5. Гамма Э., Хелм Р., Джонсон Р., Влиссидес Дж. Приемы объектно-ориентированного проектирования. Паттерны проектирования. - СПб.: Питер, 2001.-368с
  6. Кериевски Дж. Рефакторинг с использованием шаблонов. - М.: Издательский дом "Вильямс", 2006.-400с
  7. Коплиен Дж. Программирование на C++. Классика CS. - СПб.: Питер, 2005.-479с
  8. Ларман К. Применение UML и шаблонов проектирования, 2-е издание. - М.: Издательский дом "Вильямс", 2004.-624с
  9. Эккель Б. Философия C++. Практическое программирование C++. Том 2. - СПб.: Питер, 2004.-608с

Источник:

cpp-reference.ru

Паттерны проектирования

Паттерны проектирования

Перед началом статьи, я хочу предложить доклад своего товарища — Дениса Порпленко о паттернах проектирования в программировании:

А дальше продолжу более обще и расширенно, так как невозможно в одном докладе охватить всю тематику паттернов проектирования. Так же, как не охватить её и в одной статье.

Я хочу напомнить о том, что паттерны проектирования возникли как решение часто возникающих однотипных задач, собственно, в проектировании. Но основное свое развитие получили в программной разработке. И дальше буду продолжать повествование в контексте разработки программного обеспечения.

Тематика паттернов очень широка, паттерны проектирования можно разделить на такие типы, как шаблоны для программирования, шаблоны архитектуры системы и шаблоны хранения данных. Это самые популярные паттерны, есть и другие. Ниже я их все перечислю.

Многие компании используют в своей практике паттерны. Применение паттернов имеет свои плюсы и минусы.

Польза от применения шаблонов проектирования:

— основное преимущество использования шаблонов перед свободным проектированием состоит в том, что паттерн дает название проблеме и определяет способы решения многих проблем за счет готового набора абстракций

— облегчает коммуникацию между разработчиками системы

— использование шаблонов проектирования аналогично использованию готовых библиотек кода

— правильное использование шаблонов помогает разработчикам определить нужный вектор развития и уйти от многих проблем, которые могут возникнуть в процессе разработки.

Проблемы, которые порождают шаблоны проектирования:

— на мой взгляд, самая главная проблема использования шаблонов — потеря гибкости проектирования и разработки системы

— использование шаблонов усложняет систему

— слепое следование определенному шаблону и повсеместное его использование может породить кучу архитектурных и логических проблем

Основные шаблоны программирования Фундаментальные

Шаблон делегирования ( Delegation pattern ) — Объект внешне выражает некоторое поведение, но в реальности передаёт ответственность за выполнение этого поведения связанному объекту.

Шаблон функционального дизайна ( Functional design ) — Гарантирует, что каждый модуль компьютерной программы имеет только одну обязанность и исполняет её с минимумом побочных эффектов на другие части программы.

Неизменяемый интерфейс ( Immutable interface ) — Создание неизменяемого объекта.

Интерфейс ( Interface ) — Общий метод для структурирования компьютерных программ для того, чтобы их было проще понять.

Интерфейс-маркер ( Marker interface ) — В качестве атрибута (как пометки объектной сущности) применяется наличие или отсутствие реализации интерфейса-маркера. В современных языках программирования вместо этого могут применяться атрибуты или аннотации.

Контейнер свойств ( Property container ) — Позволяет добавлять дополнительные свойства для класса в контейнер (внутри класса), вместо расширения класса новыми свойствами.

Событийный шаблон ( Event channel ) — Расширяет шаблон Publish/Subscribe, создавая централизованный канал для событий. Использует объект-представитель для подписки и объект-представитель для публикации события в канале. Представитель существует отдельно от реального издателя или подписчика. Подписчик может получать опубликованные события от более чем одного объекта, даже если он зарегистрирован только на одном канале.

Порождающие шаблоны

Порождающие шаблоны ( Creational ) — шаблоны проектирования, которые абстрагируют процесс инстанцирования. Они позволяют сделать систему независимой от способа создания, композиции и представления объектов. Шаблон, порождающий классы, использует наследование, чтобы изменять инстанцируемый класс, а шаблон, порождающий объекты, делегирует инстанцирование другому объекту.

Абстрактная фабрика ( Abstract factory ) — Класс, который представляет собой интерфейс для создания компонентов системы.

Строитель ( Builder ) — Класс, который представляет собой интерфейс для создания сложного объекта.

Фабричный метод ( Factory method ) — Определяет интерфейс для создания объекта, но оставляет подклассам решение о том, какой класс инстанцировать.

Отложенная инициализация ( Lazy initialization ) — Объект, инициализируемый во время первого обращения к нему.

Пул одиночек ( Multiton ) — Гарантирует, что класс имеет поименованные экземпляры объекта и обеспечивает глобальную точку доступа к ним.

Объектный пул ( Object pool ) — Класс, который представляет собой интерфейс для работы с набором инициализированных и готовых к использованию объектов.

Прототип ( Prototype ) — Определяет интерфейс создания объекта через клонирование другого объекта вместо создания через конструктор.

Получение ресурса есть инициализация ( Resource acquisition is initialization (RAII) ) — Получение некоторого ресурса совмещается с инициализацией, а освобождение — с уничтожением объекта.

Одиночка ( Singleton ) — Класс, который может иметь только один экземпляр.

Структурные шаблоны

Структурные шаблоны ( Structural ) определяют различные сложные структуры, которые изменяют интерфейс уже существующих объектов или его реализацию, позволяя облегчить разработку и оптимизировать программу.

Адаптер ( Adapter / Wrapper ) — Объект, обеспечивающий взаимодействие двух других объектов, один из которых использует, а другой предоставляет несовместимый с первым интерфейс.

Мост ( Bridge ) — Структура, позволяющая изменять интерфейс обращения и интерфейс реализации класса независимо.

Компоновщик ( Composite ) — Объект, который объединяет в себе объекты, подобные ему самому.

Декоратор или Обёртка ( Decorator ) или ( Wrapper ) — Класс, расширяющий функциональность другого класса без использования наследования.

Фасад ( Facade ) — Объект, который абстрагирует работу с несколькими классами, объединяя их в единое целое.

Единая точка входа ( Front controller ) — Обеспечивает унифицированный интерфейс для интерфейсов в подсистеме. Front Controller определяет высокоуровневый интерфейс, упрощающий использование подсистемы.

Приспособленец ( Flyweight ) — Это объект, представляющий себя как уникальный экземпляр в разных местах программы, но по факту не являющийся таковым.

Заместитель ( Proxy ) — Объект, который является посредником между двумя другими объектами, и который реализует/ограничивает доступ к объекту, к которому обращаются через него.

Поведенческие шаблоны

Поведенческие шаблоны ( Behavioral ) определяют взаимодействие между объектами, увеличивая таким образом его гибкость.

Цепочка обязанностей ( Chain of responsibility ) — Предназначен для организации в системе уровней ответственности.

Команда ( Command ) — Представляет действие. Объект команды заключает в себе само действие и его параметры.

Интерпретатор ( Interpreter ) — Решает часто встречающуюся, но подверженную изменениям, задачу.

Итератор ( Iterator ) — Представляет собой объект, позволяющий получить последовательный доступ к элементам объекта-агрегата без использования описаний каждого из объектов, входящих в состав агрегации.

Посредник ( Mediator ) — Обеспечивает взаимодействие множества объектов, формируя при этом слабую связанность и избавляя объекты от необходимости явно ссылаться друг на друга.

Хранитель ( Memento ) — Позволяет не нарушая инкапсуляцию зафиксировать и сохранить внутренние состояния объекта так, чтобы позднее восстановить его в этих состояниях.

Нулевой объект ( Null object ) — Предотвращает нулевые указатели, предоставляя объект «по умолчанию».

Наблюдатель ( Observer ) — Определяет зависимость типа «один ко многим» между объектами таким образом, что при изменении состояния одного объекта все зависящие от него оповещаются об этом событии.

Слуга ( Servant ) — Используется для обеспечения общей функциональности группе классов.

Спецификация ( Specification ) — Служит для связывания бизнес-логики.

Состояние ( State ) — Используется в тех случаях, когда во время выполнения программы объект должен менять своё поведение в зависимости от своего состояния.

Стратегия ( Strategy ) — Предназначен для определения семейства алгоритмов, инкапсуляции каждого из них и обеспечения их взаимозаменяемости.

Шаблонный метод ( Template method ) — Определяет основу алгоритма и позволяет наследникам переопределять некоторые шаги алгоритма, не изменяя его структуру в целом.

Посетитель ( Visitor ) — Описывает операцию, которая выполняется над объектами других классов. При изменении класса Visitor нет необходимости изменять обслуживаемые классы.

Простая политика — я знаю, что такой паттерн есть, но что он означает, пока не нашел. Если будет инфа — скиньте в комментариях.

Слушатель ( Event listener ) — аналогично

Одноразовый посетитель ( Single-serving visitor ) — Оптимизирует реализацию шаблона посетитель, который инициализируется, единожды используется, и затем удаляется.

Иерархический посетитель ( Hierarchical visitor ) — Предоставляет способ обхода всех вершин иерархической структуры данных (например, древовидной).

Шаблоны параллельного программирования

Используются для более эффективного написания многопоточных программ, и предоставляет готовые решения проблем синхронизации.

Активный объект ( Active Object ) — Служит для отделения потока выполнения метода от потока, в котором он был вызван. Использует шаблоны асинхронный вызов методов и планировщик.

Уклонитель ( Balking ) — Служит для выполнения действия над объектом только тогда, когда тот находится в корректном состоянии.

Привязка свойств ( Binding properties ) — Комбинирует несколько наблюдателей для обеспечения синхронизации свойств в различных объектах

Обмен сообщениями ( Messaging design pattern (MDP) ) — Позволяет компонентам и приложениям обмениваться информацией (сообщениями).

Блокировка с двойной проверкой ( Double-checked locking ) — Предназначен для уменьшения накладных расходов, связанных с получением блокировки.

Ассинхронные события ( Event-based asynchronous ) — Адресные проблемы с Асинхронным паттерном, которые возникают в программах с несколькими потоками.

Охраняемая приостановка ( Guarded suspension ) — Используется для блокировки выполнения действия над объектом только тогда, когда тот находится в корректном состоянии.

Полусинхронизация ( Half-Sync/Half-Async ) — пока нет данных про этот паттерн.

Лидеры ( Leaders/followers ) — пока нет данных про этот паттерн.

Замок ( Lock ) — Один поток блокирует ресурс для предотвращения доступа или изменения его другими потоками.

Монитор ( Monitor object ) — Объект, предназначенный для безопасного использования более чем одним потоком.

Реактор ( Reactor ) — Предназначен для синхронной передачи запросов сервису от одного или нескольких источников.

Блокировка чтение-запись ( Read write lock ) — Позволяет нескольким потокам одновременно считывать информацию из общего хранилища, но позволяя только одному потоку в текущий момент времени её изменять.

Планировщик ( Scheduler ) — Обеспечивает механизм реализации политики планирования, но при этом не зависящих ни от одной конкретной политики.

Пул потоков ( Thread pool ) — Предоставляет пул потоков для обработки заданий, представленных обычно в виде очереди.

Спецпотоковое хранилище ( Thread-specific storage ) — Служит для предоставления различных глобальных переменных для разных потоков.

Однопоточное выполнение ( Single thread execution ) — Препятствует конкурентному вызову метода, тем самым запрещая параллельное выполнение этого метода.

Кооперативный паттерн ( Cooperative pattern ) — Обеспечивает механизм безопасной остановки потоков исполнения, используя общий флаг для сигнализирования прекращения работы потоков.

Шаблоны архитектуры системы

Model-View-Controller (MVC) — Модель-представление-контроллер.

Enterprise шаблоны

Active Record — способ доступа к данным реляционных баз данных в объектно-ориентированном программировании.

Composite Entity/Составная Сущность

DAO (Data Access Object) Объект Доступа к Данным

Service Locator/Локатор Службы

Service to Worker

Session Facade/Фасад Сессии

Transfer Object Assembler

Transfer Object/Объект Перемещения

Value List Handler/Обработчик Списка Значений

Другие типы шаблонов

Также на сегодняшний день существует ряд других шаблонов.

Carrier Rider Mapper описывают предоставление доступа к хранимой информации.

Аналитические шаблоны описывают основной подход для составления требований для программного обеспечения (requirement analysis) до начала самого процесса программной разработки

Коммуникационные шаблоны описывают процесс общения между отдельными участниками/сотрудниками организации

Организационные шаблоны описывают организационную иерархию предприятия/фирмы

Антипаттерны (Anti-Design-Patterns) описывают, как не следует поступать при разработке программ, показывая характерные ошибки в дизайне и в реализации

Источник:

www.webmancer.org

Страница курса Паттерны проектирования

Страница курса Паттерны проектирования Материалы к курсу Раздаточные материалы Литература
  1. Д. Влиссидес, Э.Гамма, Р. Хелм, Р. Джонсон. Приёмы объектно ориентированного проектирования.Паттерны проектирования. Основная книга
  2. Стелтинг С., Массен О. Применение шаблонов Java Хорошая книга с несколькими новыми паттернами
  3. Гранд М. - Шаблоны проектирования в Java.
  4. Фримен Р., Фримен Л., Сьерра К., Бейтс Б. - Паттерны проектирования. Слишком популярная книга. Может служить источником нескольких примеров
  5. Смит Д. Элементарные шаблоны проектирования (2013). Попытка выделить в стандартных шаблонах элементарные и формализовать описание шаблонов.
  6. Мартин Фаулер. Архитектура корпоративных программных приложений. Паттерны в корпоративных приложениях
  1. UMLet - Редактор диаграмм UML с простым интерфейсом.
  2. Microsoft Visio (по подписке MSDN)
Интернет-источники Типы заданий
  • По системе классов нарисовать UML-диаграмму
  • По UML-диаграмме создать систему классов
  • Реализовать задачу с применением данного паттерна и сдать отчет в указанном виде (вид отчета на паттерны разработать)
  • В коде увидеть паттерн
  • Переделать код без паттерна в код с паттерном
  • Расширить работающий код с паттерном новой функциональностью (связь с ООП)

  • Доклады по конкретным реализациям паттернов в промышленных системах.
  • Доклады по паттернам в параллельном программировании (везде они выносятся как отдельная тема)

Для дополнительных баллов рейтинга:

  • Пополнение коллекции удачных простых хорошо запоминающихся примеров реализации паттернов

Необходимые факты из ООП
  • Нотация UML-диаграмм классов и диаграмм последовательности
  • Защита доступа в C#
  • Свойства в C#, их особенности
  • Делегаты C# (Указатели на функции, процедурные переменные). Multicast-делегаты
  • События C# (events) - при необходимости
  • Делегирование (один класс делегирует действия другому классу)
  • Наследование и принцип Открыт-Закрыт
  • Полиморфизм и принцип подстановки
  • Интерфейсы
  • Абстрактные классы, определение виртуальных методов для них
Введение в паттерны проектирования Что такое паттерн проектирования

Паттерн проектирования - описание взаимодействия объектов и классов, адаптированных для решения общей задачи проектирования в конкретном контексте.

Паттерн проектирования состоит из четырех элементов.

  1. Имя.Обращаясь к паттерну по имени, можно вести обсуждение с коллегами, упоминать паттерны в документации.
  2. Задача. Описание того, когда следует применять паттерн. Может описываться конкретная проблема, при решении которой уместно использовать паттерн.
  3. Решение.Описание классов и объектов, связей между ними.
  4. Результаты. Преимущества и недостатки данного паттерна. Влияние на степень гибкости, расширяемости и переносимости всей системы.

Описание паттернов проектирования
  • Название и классификация паттерна
  • Назначение
  • Известен также под именем
  • Мотивация (описание)

Какие недостатки есть у существующих решений и как паттерн помогает их решать.

Ситуации, в которых уместно использовать данный паттерн.

Диаграмма классов паттерна. Возможно, диаграмма последовательности.

Классы и объекты и их методы

Взаимодействие классов и объектов

Результаты применения, компромиссы. Какие аспекты поведения системы можно независимо изменять, используя данный паттерн.

Сложности реализации, зависимость от используемых языков программирования

Ранее известные паттерны
  • Упаковка параметров
  • Делегирование
  • Итератор
  • Выполнение операции для элементов полиморфного контейнера
Каталог основных паттернов Порождающие паттерны

MazeGame - общий пример для порождающих паттернов Абстрактная фабрика, Строитель, Фабричный метод, Прототип.

Абстрактная фабрика (Abstract Factory)

Предоставляет интерфейс для создания компонентов системы.

Строитель (Builder)

Предоставляет интерфейс для создания частей сложного объекта и возвращения сконструированного объекта.

Фабричный метод (Factory Method)

Определяет интерфейс для создания объекта и оставляет подклассам решение о том, какой класс инстанцировать.

Прототип (Prototype)

Облегчает динамическое создание путем определения классов, объекты которых могут создавать свои дубликаты.

Одиночка (Singleton)

Обеспечивает наличие в системе только одного экземпляра заданного класса, предоставляет доступ к этому экземпляру.

Пул объектов (Object Pool)

Обеспечивает интерфейс для работы с набором инициализированных и готовых к использованию объектов.

Отложенная инициализация (Lazy Initialization)

Объект, инициализируемый во время первого обращения к нему.

Структурные паттерны Адаптер (Adapter)

Адаптирует интерфейс одного класса к другому.

Мост (Bridge)

Позволяет менять интерфейс и реализацию независимо друг от друга.

Компоновщик (Composite)

Объединяет объекты в древовидные структуры. Единообразно трактует простые и составные объекты.

Пример. Графические фигуры - это окружность, квадрат, отрезок и СоставнаяФигура, которая состоит из других фигур, в то же время являясь фигурой.

Декоратор (Decorator)

Динамически добавляет объекту новые свойства (без использования наследования, на этапе выполнения).

Фасад (Facade)

Предоставляет простой интерфейс к большой системе, которая обычно представляет множество взаимосвязанных классов.

Приспособленец (Flyweight)

Уменьшает количество объектов системы с многочисленными низкоуровневыми особенностями путем совместного использования подобных объектов.

Заместитель (Proxy)

Заместитель ведет себя точно так же как и основной объект, выполняя при необходимости его инстанцирование.

Паттерны поведения Цепочка обязанностей (Chain of Responsibility)

Некий запрос должен быть обработан в цепочке взаимосвязанных объектов (список, дерево - движение от листьев к корню). Объект либо обрабатывает запрос, либо передвает по цепочке следующему объекту. Если ни один из объектов не обработал запрос, то может происходить какое-то действие.

Команда (Command)

Упаковка действий в объекты с целью сделать откат изменений (Redo), логирование, комбинирование действий.

Посредник (Mediator)

В большой системе с множеством объектов каждый объект может передавать сообщения другому. В результате этого сильно возрастает количество связей между объектами (n^2).

Вместо этого предлагается завести объект-посредник, через который передавать эти сообщения (n связей)

Хранитель (Memento)

Хранитель - это объект, в котором сохраняется состояние другого объекта - хозяина хранителя. Это необходимо для того чтобы хозяин мог записать в хранитель некоторую контрольную точку - своё текущее состояние, а потом вернуться к этому состоянию.

Null Object

Предотвращает нулевые указатели, предоставляя объект «по умолчанию».

Наблюдатель (Observer)

Другое имя: Издатель-Подписчик (Publisher-Subscriber)

При изменении состояния одного объекта все зависимые от него объекты (подписчики) оповещаются об обновлении.

Состояние (State)

Позволяет объекту менять своё поведение в зависимости от состояния. Состояние моделируется абстрактным объектом с множеством подобъектов (состояний).

Стратегия (Strategy)

Определяет семейство алгоритмов и позволяет менять алгоритм независимо от объекта-клиента, который им пользуется.

Шаблонный метод (Template Method)

Определяет каркас алгоритма с изменяющимися областями и позволяет наследникам переопределять эти области.

Посетитель (Visitor)

Позволяет выполнить над каждым объектом некоторой структуры операцию, не загрязняя код класса этого объекта и не используя определение типа для каждого объекта.

Разновидность - иерархический визитор - позволяет обойти иерархическую структуру (дерево)

Архитектурные паттерны Модель-Представление-Контроллер (Model-View-Controller,MVC)

Модель данных приложения (бизнес-логика), пользовательский интерфейс и взаимодействие с пользователем разделены на три отдельных компонента таким образом, чтобы модификация одного из компонентов оказывала минимальное воздействие на остальные. Является по-существу схемой использования нескольких шаблонов проектирования.

Источник:

it.mmcs.sfedu.ru

Паттерны проектирования в городе Екатеринбург

В этом каталоге вы можете найти Паттерны проектирования по доступной цене, сравнить цены, а также найти похожие предложения в группе товаров Компьютеры и интернет. Ознакомиться с параметрами, ценами и обзорами товара. Транспортировка выполняется в любой город России, например: Екатеринбург, Омск, Ярославль.