Паттерны GoF. Часть 2. Лекция 5

Содержание

Слайд 2

В прошлой серии…

Порождающие паттерны GoF
Singleton
Factory Method
Abstract Factory
Builder
Prototype

В прошлой серии… Порождающие паттерны GoF Singleton Factory Method Abstract Factory Builder Prototype

Слайд 3

Структурные паттерны

Adapter (Адаптер)
Bridge (Мост)
Composite (Компоновщик)
Decorator (Декоратор)
Facade (Фасад)
Flyweight (Приспособленец)
Proxy (Заместитель)

Структурные паттерны Adapter (Адаптер) Bridge (Мост) Composite (Компоновщик) Decorator (Декоратор) Facade (Фасад) Flyweight (Приспособленец) Proxy (Заместитель)

Слайд 4

Adapter

Адаптер преобразует интерфейс одного класса в интерфейс другого, который ожидают клиенты. Адаптер

Adapter Адаптер преобразует интерфейс одного класса в интерфейс другого, который ожидают клиенты.
обеспечивает совместную работу классов с несовместимыми интерфейсами, которая без него была бы невозможна (пример: создание текстового элемента в графическом редакторе)

Слайд 5

Bridge

Необходим для отделения абстракции от ее реализации так, чтобы то и другое

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

Слайд 7

Особенности

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

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

Слайд 8

Composite

Компонует объекты в древовидные структуры для представления иерархий часть-целое. Позволяет клиентам единообразно

Composite Компонует объекты в древовидные структуры для представления иерархий часть-целое. Позволяет клиентам
трактовать индивидуальные и составные объекты

Слайд 9

Decorator

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

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

Слайд 10

Особенности

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

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

Слайд 11

Facade

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

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

Слайд 13

Flyweight

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

Flyweight Шаблон проектирования, который позволяет использовать разделяемые объекты сразу в нескольких контекстах.
не могут делать предположений о контексте, в котором работают.
Применим когда:
в приложении используется большое число очень схожих экземпляров заданного класса;
часть состояния объекта является контекстной и может быть легко вынесена во внешние структуры;
после вынесения части состояния, все экземпляры становятся одинаковыми и это дает возможность заменить их одним;
приложение не проверяет идентичность объектов, т.к. в этом случае все якобы самостоятельные экземпляры являются одним объектом.

Слайд 15

Особенности

При использовании приспособленцев не исключены затраты на передачу, поиск или вычисление внутреннего

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

Слайд 16

Proxy

Прокси является суррогатом другого объекта и контролирует доступ к нему.

Proxy Прокси является суррогатом другого объекта и контролирует доступ к нему.

Слайд 17

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

Chain of responsibility (Цепочка обязанностей )
Command (Команда)
Interpreter (Интерпретатор)

Паттерны поведения Chain of responsibility (Цепочка обязанностей ) Command (Команда) Interpreter (Интерпретатор)
Iterator (Итератор)
Mediator (Посредник)
Memento (Хранитель)
Observer (Наблюдатель)
State (Состояние)
Strategy (Стратегия)
Template method (Шаблонный метод)
Visitor (Посетитель)

Слайд 18

Chain of responsibility

Паттерн позволяет избежать привязки отправителя запроса к его получателю, давая

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

Слайд 19

Особенности

ослабление связанности. Этот паттерн освобождает объект от необходимости знать, кто конкретно обработает

Особенности ослабление связанности. Этот паттерн освобождает объект от необходимости знать, кто конкретно
его запрос
дополнительная гибкость при распределении обязанностей между объектами. Цепочка обязанностей позволяет повысить гибкость распределения обязанностей между объектами. Добавить или изменить обязанности по обработке запроса можно, включив в цепочку новых участников или изменив ее каким-то другим образом.
получение не гарантировано

Слайд 20

Command

Инкапсулирует запрос как объект, позволяя тем самым задавать параметры клиентов для обработки

Command Инкапсулирует запрос как объект, позволяя тем самым задавать параметры клиентов для
соответствующих запросов, ставить запросы в очередь или протоколировать их, а также поддерживать отмену операций

Слайд 21

Особенности

команда разрывает связь между объектом, инициирующим операцию, и объектом, имеющим информацию о

Особенности команда разрывает связь между объектом, инициирующим операцию, и объектом, имеющим информацию
том, как ее выполнить
команды - это самые настоящие объекты. Допускается манипулировать ими и расширять их точно так же, как в случае с любыми другими объектами
Из простых команд можно собирать составные (например макросы в текстовых редакторах). В общем случае составные команды описываются паттерном компоновщик
добавлять новые команды легко, поскольку никакие существующие классы изменять не нужно

Слайд 22

Interpreter

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

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

Слайд 24

Особенности

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

Особенности грамматику легко изменять и расширять сложные грамматики трудно сопровождать добавление новых
(например, вывод в строковом виде)

Слайд 25

Iterator

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

Iterator Предоставляет абстрактный интерфейс для последовательного доступа ко всем элементам составного объекта
раскрытия его внутренней структуры

Слайд 27

Mediator

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

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

Слайд 28

Memento

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

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

Слайд 29

Observer

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

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

Слайд 30

Особенности

абстрактная связанность субъекта и наблюдателя. Субъект имеет информацию лишь о том, что

Особенности абстрактная связанность субъекта и наблюдателя. Субъект имеет информацию лишь о том,
у него есть ряд наблюдателей, каждый из которых подчиняется простому интерфейсу абстрактного класса Observer. Субъекту неизвестны конкретные классы наблюдателей. Таким образом, связи между субъектами и наблюдателями носят абстрактный характер и сведены к минимуму.
поддержка широковещательных коммуникаций. В отличие от обычного за-проса для уведомления, посылаемого субъектом, не нужно задавать определенного получателя. Уведомление автоматически поступает всем подписавшимся на него объектам.
Поскольку наблюдатели не располагают информацией друг о друге, им неизвестно и о том, во что обходится изменение субъекта. Безобидная, на первый взгляд, операция над субъектом может вызвать целый ряд обновлений наблюдателей и зависящих от них объектов.

Слайд 31

State

позволяет объекту варьировать свое поведение в зависимости от внутреннего состояния. Извне создается

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

Слайд 32

Особенности

локализует зависящее от состояния поведение и делит его на части, соот-ветствующие состояниям.

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

Слайд 33

Strategy

Определяет семейство алгоритмов, инкапсулирует каждый из них и делает их взаимозаменяемыми. Стратегия

Strategy Определяет семейство алгоритмов, инкапсулирует каждый из них и делает их взаимозаменяемыми.
позволяет изменять алгоритмы независимо от клиентов, которые ими пользуются.

Слайд 34

Особенности

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

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

Слайд 35

Template Method

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

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

Слайд 36

Visitor

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

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