Шаблоны проектирования
(GoF)
Виталий Унгурян
unguryan@itstep.org
Шаблоны проектирования в ООП
При создании программных систем
перед разработчиками часто встает
проблема выбора тех или иных
проектных решений.
В этих случаях на помощь приходят
шаблоны проектирования.
История
В 1994 был опубликован каталог,
включающий 23 шаблона объектно-
ориентированного проектирования.
Этот каталог стал настолько популярен,
что его часто упоминается как шаблоны
GoF
("Gang of Four" или "банда четырех" по
числу авторов).
Взаимосвязи между шаблонами
 Некоторые шаблоны
естественным образом подходят
друг к другу.
 Один шаблон вытекает из другого.
 Некоторые шаблоны похожи или
альтернативны
 Новые шаблоны можно
обнаружить и задокументировать
Взаимосвязи между шаблонами
Шаблоны - это не методы и не
фреймворки.
Шаблоны дают вам пример
решение проблемы эффективным
способом.
Шаблоны проектирования GOF
 порождающие (creational);
 структурные (structural).
 поведенческие (behavioral);
Порождающие шаблоны
Порождаюшие патерны
Порождающие шаблоны
(англ. Creational patterns) —
шаблоны проектирования, которые
абстрагируют процесс создания
объекта.
Одиночка
Singleton (Одиночка) – это один из
самых распростроненных патернов.
Задача этого шаблона ограничить
количество экземпляров некоторого
класса в пределах приложения.
Прототип
Prototype (Пртотип) – задаёт виды
создаваемых объектов с помощью
экземпляра-прототипа и создаёт
новые объекты путём копирования
этого прототипа.
Строитель
Builder (строитель) - отделяет
процесс создания некоторого
сложного объекта от его
представления. Таким образом,
можно получать различные
представления объекта, используя
один и тот же "технологический"
процесс.
Фабричный метод
Factory Method - это паттерн
создания объектов. Данный шаблон
проектирования предоставляет
интерфейс для создания
экземпляров некоторого класса. В
момент создания наследники могут
определить, какой класс
инстанциировать.
Абстрактная фабрика
Абстрактная фабрика -
предоставляет интерфейс для
создания целых семейств объектов
без указания конкретных классов.
Объекты каждого семейства
должны быть логически связаны
между собой.
Абстрактная фабрика
Используйте паттерн Абстрактная
Фабрика в таких случаях:
• система не должна зависеть от
способа создания объектов;
• система работает с одним из
нескольких семейств объектов;
• объекты внутри семейства
взаимосвязаны.
Стурктурные шаблоны
Структурные шаблоны
Структурные шаблоны —
шаблоны проектирования,
рассматривают вопрос о том, как
из классов и объектов образуются
более крупные структуры.
Фасад
Шаблон фасад (англ. Facade) —
позволяет скрыть сложность
системы путём сведения всех
возможных внешних вызовов к
одному объекту, делегирующему их
соответствующим объектам
системы.
Адаптер
Адаптер (англ. Adapter)
используется для того, чтобы
объекты с одним интерфейсом
(контрактом) мог работать там, где
необходим объект с совершенно
другим интерфейсом.
Адаптер
Существует два типа адаптеров -
Class Adapter и Object Adapter.
Компоновщик
Компоновщик (англ. Composite
pattern) — объединяет объекты в
древовидную структуру для
представления иерархии от
частного к целому. Компоновщик
позволяет клиентам обращаться к
отдельным объектам и к группам
объектов одинаково.
Заместитель
Заместитель (англ. Proxy) —
предоставляет объект, который
контролирует доступ к другому
объекту, перехватывая все вызовы
(выполняет функцию контейнера).
Мост
Шаблон мост (англ. Bridge) —,
используемый используется чтобы
«разделять абстракцию и
реализацию так, чтобы они могли
изменяться независимо
Мост
Шаблон мост использует
инкапсуляцию, агрегирование и
может использовать наследование
для того, чтобы разделить
ответственность между классами.
Декаратор
Декоратор (англ. Decorator) —
предназначен для динамического
подключения дополнительного
поведения к объекту. Шаблон
Декоратор предоставляет гибкую
альтернативу практике создания
подклассов с целью расширения
функциональности.
Поведенческие шаблоны
Наблюдатель англ. Observer
Наблюдатель — поведенческий
шаблон проектирования. Также
известен как «подчинённые»
(Dependents), «издатель-
подписчик» (Publisher-Subscriber).
Наблюдатель англ. Observer
Наблюдатель - создает механизм
у класса, который позволяет
получать экземпляру объекта этого
класса оповещения от других
объектов об изменении их
состояния, тем самым наблюдая за
ними
В каких случаях используется?
 Если один объект должен передавать
сообщения другим объектам, но при
этом он не может или не должен знать
об их внутреннем устройстве;
 В случае если при изменении одного
объекта необходимо изменять другие
объекты;
В каких случаях используется?
 Для предотвращения сильных
связей между объектами системы;
 Для наблюдения за состоянием
определенных объектов системы;
Хранитель
Хранитель (англ. Memento) — позволяет,
не нарушая инкапсуляцию,
зафиксировать и сохранить внутреннее
состояние объекта так, чтобы позднее
восстановить его в это состояние.
Стратегия
Стратегия (Strategy) известен также
под названием Policy.
Суть его состоит в том, чтобы
создать несколько моделей
поведения (стратегий) для одного
объекта и вынести их в отдельные
классы.
Итератор
Итератор - это шаблон
программирования позволяющий
получить доступ к элементам
любой коллекции, не вникания в
суть ее реализации.
Команда
Команда (англ. Command) —
используеться при объектно-
ориентированном
программировании,
представляющий действие. Объект
команды заключает в себе само
действие и его параметры.
Цепочка отвественности
Цепочка обязанностей
(англ. Chain of responsibility) —,
предназначен для организации в
системе уровней ответственности.
Список шаблонов

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

  • 1.
  • 2.
    Шаблоны проектирования вООП При создании программных систем перед разработчиками часто встает проблема выбора тех или иных проектных решений. В этих случаях на помощь приходят шаблоны проектирования.
  • 3.
    История В 1994 былопубликован каталог, включающий 23 шаблона объектно- ориентированного проектирования. Этот каталог стал настолько популярен, что его часто упоминается как шаблоны GoF ("Gang of Four" или "банда четырех" по числу авторов).
  • 4.
    Взаимосвязи между шаблонами Некоторые шаблоны естественным образом подходят друг к другу.  Один шаблон вытекает из другого.  Некоторые шаблоны похожи или альтернативны  Новые шаблоны можно обнаружить и задокументировать
  • 5.
    Взаимосвязи между шаблонами Шаблоны- это не методы и не фреймворки. Шаблоны дают вам пример решение проблемы эффективным способом.
  • 6.
    Шаблоны проектирования GOF порождающие (creational);  структурные (structural).  поведенческие (behavioral);
  • 7.
  • 8.
    Порождаюшие патерны Порождающие шаблоны (англ.Creational patterns) — шаблоны проектирования, которые абстрагируют процесс создания объекта.
  • 9.
    Одиночка Singleton (Одиночка) –это один из самых распростроненных патернов. Задача этого шаблона ограничить количество экземпляров некоторого класса в пределах приложения.
  • 10.
    Прототип Prototype (Пртотип) –задаёт виды создаваемых объектов с помощью экземпляра-прототипа и создаёт новые объекты путём копирования этого прототипа.
  • 11.
    Строитель Builder (строитель) -отделяет процесс создания некоторого сложного объекта от его представления. Таким образом, можно получать различные представления объекта, используя один и тот же "технологический" процесс.
  • 12.
    Фабричный метод Factory Method- это паттерн создания объектов. Данный шаблон проектирования предоставляет интерфейс для создания экземпляров некоторого класса. В момент создания наследники могут определить, какой класс инстанциировать.
  • 13.
    Абстрактная фабрика Абстрактная фабрика- предоставляет интерфейс для создания целых семейств объектов без указания конкретных классов. Объекты каждого семейства должны быть логически связаны между собой.
  • 14.
    Абстрактная фабрика Используйте паттернАбстрактная Фабрика в таких случаях: • система не должна зависеть от способа создания объектов; • система работает с одним из нескольких семейств объектов; • объекты внутри семейства взаимосвязаны.
  • 15.
  • 16.
    Структурные шаблоны Структурные шаблоны— шаблоны проектирования, рассматривают вопрос о том, как из классов и объектов образуются более крупные структуры.
  • 17.
    Фасад Шаблон фасад (англ.Facade) — позволяет скрыть сложность системы путём сведения всех возможных внешних вызовов к одному объекту, делегирующему их соответствующим объектам системы.
  • 18.
    Адаптер Адаптер (англ. Adapter) используетсядля того, чтобы объекты с одним интерфейсом (контрактом) мог работать там, где необходим объект с совершенно другим интерфейсом.
  • 19.
    Адаптер Существует два типаадаптеров - Class Adapter и Object Adapter.
  • 20.
    Компоновщик Компоновщик (англ. Composite pattern)— объединяет объекты в древовидную структуру для представления иерархии от частного к целому. Компоновщик позволяет клиентам обращаться к отдельным объектам и к группам объектов одинаково.
  • 21.
    Заместитель Заместитель (англ. Proxy)— предоставляет объект, который контролирует доступ к другому объекту, перехватывая все вызовы (выполняет функцию контейнера).
  • 22.
    Мост Шаблон мост (англ.Bridge) —, используемый используется чтобы «разделять абстракцию и реализацию так, чтобы они могли изменяться независимо
  • 23.
    Мост Шаблон мост использует инкапсуляцию,агрегирование и может использовать наследование для того, чтобы разделить ответственность между классами.
  • 24.
    Декаратор Декоратор (англ. Decorator)— предназначен для динамического подключения дополнительного поведения к объекту. Шаблон Декоратор предоставляет гибкую альтернативу практике создания подклассов с целью расширения функциональности.
  • 25.
  • 26.
    Наблюдатель англ. Observer Наблюдатель— поведенческий шаблон проектирования. Также известен как «подчинённые» (Dependents), «издатель- подписчик» (Publisher-Subscriber).
  • 27.
    Наблюдатель англ. Observer Наблюдатель- создает механизм у класса, который позволяет получать экземпляру объекта этого класса оповещения от других объектов об изменении их состояния, тем самым наблюдая за ними
  • 28.
    В каких случаяхиспользуется?  Если один объект должен передавать сообщения другим объектам, но при этом он не может или не должен знать об их внутреннем устройстве;  В случае если при изменении одного объекта необходимо изменять другие объекты;
  • 29.
    В каких случаяхиспользуется?  Для предотвращения сильных связей между объектами системы;  Для наблюдения за состоянием определенных объектов системы;
  • 30.
    Хранитель Хранитель (англ. Memento)— позволяет, не нарушая инкапсуляцию, зафиксировать и сохранить внутреннее состояние объекта так, чтобы позднее восстановить его в это состояние.
  • 31.
    Стратегия Стратегия (Strategy) известентакже под названием Policy. Суть его состоит в том, чтобы создать несколько моделей поведения (стратегий) для одного объекта и вынести их в отдельные классы.
  • 32.
    Итератор Итератор - этошаблон программирования позволяющий получить доступ к элементам любой коллекции, не вникания в суть ее реализации.
  • 33.
    Команда Команда (англ. Command)— используеться при объектно- ориентированном программировании, представляющий действие. Объект команды заключает в себе само действие и его параметры.
  • 34.
    Цепочка отвественности Цепочка обязанностей (англ.Chain of responsibility) —, предназначен для организации в системе уровней ответственности.
  • 35.