SlideShare ist ein Scribd-Unternehmen logo
1 von 35
Downloaden Sie, um offline zu lesen
Шаблоны проектирования
(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) —,
предназначен для организации в
системе уровней ответственности.
Список шаблонов

Weitere ähnliche Inhalte

Was ist angesagt?

Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Java
metaform
 
Шаблоны разработки ПО. Рефакторинг
Шаблоны разработки ПО. РефакторингШаблоны разработки ПО. Рефакторинг
Шаблоны разработки ПО. Рефакторинг
Sergey Nemchinsky
 
C++ осень 2013 лекция 5
C++ осень 2013 лекция 5C++ осень 2013 лекция 5
C++ осень 2013 лекция 5
Technopark
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Java
metaform
 
C++ осень 2013 лекция 3
C++ осень 2013 лекция 3C++ осень 2013 лекция 3
C++ осень 2013 лекция 3
Technopark
 
Глава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansГлава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeans
metaform
 

Was ist angesagt? (20)

Интерфейсы
ИнтерфейсыИнтерфейсы
Интерфейсы
 
Классы и объекты С#
Классы и объекты С#Классы и объекты С#
Классы и объекты С#
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Java
 
Шаблоны разработки ПО. Рефакторинг
Шаблоны разработки ПО. РефакторингШаблоны разработки ПО. Рефакторинг
Шаблоны разработки ПО. Рефакторинг
 
Рефлексия в java
Рефлексия в javaРефлексия в java
Рефлексия в java
 
принципы ооп и программирование классов в C#
принципы ооп и программирование классов в C#принципы ооп и программирование классов в C#
принципы ооп и программирование классов в C#
 
Java. Полиморфизм.
Java. Полиморфизм.Java. Полиморфизм.
Java. Полиморфизм.
 
C++ осень 2013 лекция 5
C++ осень 2013 лекция 5C++ осень 2013 лекция 5
C++ осень 2013 лекция 5
 
Java. Вложенные классы и интерфейсы.
Java. Вложенные классы и интерфейсы.Java. Вложенные классы и интерфейсы.
Java. Вложенные классы и интерфейсы.
 
Java. Наследование.
Java. Наследование.Java. Наследование.
Java. Наследование.
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Java
 
Java Core. Lecture# 1. Intro
Java Core. Lecture# 1. IntroJava Core. Lecture# 1. Intro
Java Core. Lecture# 1. Intro
 
C++ осень 2013 лекция 3
C++ осень 2013 лекция 3C++ осень 2013 лекция 3
C++ осень 2013 лекция 3
 
Java Core. Lecture# 2. Classes & objects.
Java Core. Lecture# 2. Classes & objects.Java Core. Lecture# 2. Classes & objects.
Java Core. Lecture# 2. Classes & objects.
 
Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"
 
Глава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansГлава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeans
 
Java core-lect6-part3-annotation.ppt
Java core-lect6-part3-annotation.pptJava core-lect6-part3-annotation.ppt
Java core-lect6-part3-annotation.ppt
 
ВИРТУАЛЬНАЯ ЛАБОРАТОРИЯ ОБУЧЕНИЯ МЕТОДАМ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА ДЛЯ ГЕНЕРА...
ВИРТУАЛЬНАЯ ЛАБОРАТОРИЯ ОБУЧЕНИЯ МЕТОДАМ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА ДЛЯ ГЕНЕРА...ВИРТУАЛЬНАЯ ЛАБОРАТОРИЯ ОБУЧЕНИЯ МЕТОДАМ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА ДЛЯ ГЕНЕРА...
ВИРТУАЛЬНАЯ ЛАБОРАТОРИЯ ОБУЧЕНИЯ МЕТОДАМ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА ДЛЯ ГЕНЕРА...
 
Наследование и полиморфизм
Наследование и полиморфизмНаследование и полиморфизм
Наследование и полиморфизм
 
Java Core. Lecture# 3. Part# 1. Abstract classes.
Java Core. Lecture# 3. Part# 1. Abstract classes.Java Core. Lecture# 3. Part# 1. Abstract classes.
Java Core. Lecture# 3. Part# 1. Abstract classes.
 

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

C++ осень 2013 лекция 8
C++ осень 2013 лекция 8C++ осень 2013 лекция 8
C++ осень 2013 лекция 8
Technopark
 
C++ осень 2012 лекция 7
C++ осень 2012 лекция 7C++ осень 2012 лекция 7
C++ осень 2012 лекция 7
Technopark
 
Бизнес и системный анализ весна 2013 лекция 5
Бизнес и системный анализ весна 2013 лекция 5Бизнес и системный анализ весна 2013 лекция 5
Бизнес и системный анализ весна 2013 лекция 5
Technopark
 
Проектирование_и_архитектура_ПС_2022_L09s.ppt
Проектирование_и_архитектура_ПС_2022_L09s.pptПроектирование_и_архитектура_ПС_2022_L09s.ppt
Проектирование_и_архитектура_ПС_2022_L09s.ppt
dinarium2016
 
Сила парадигмы: обзор парадигм программирования
Сила парадигмы: обзор парадигм программированияСила парадигмы: обзор парадигм программирования
Сила парадигмы: обзор парадигм программирования
Vasiliy Sabadazh
 
Unified modeling language basic-part 1
Unified modeling language basic-part 1Unified modeling language basic-part 1
Unified modeling language basic-part 1
ISsoft
 

Ähnlich wie Шаблоны проектирования GoF (20)

C++ осень 2013 лекция 8
C++ осень 2013 лекция 8C++ осень 2013 лекция 8
C++ осень 2013 лекция 8
 
C++ осень 2012 лекция 7
C++ осень 2012 лекция 7C++ осень 2012 лекция 7
C++ осень 2012 лекция 7
 
шаблоны проектирования (42)
шаблоны проектирования (42)шаблоны проектирования (42)
шаблоны проектирования (42)
 
Бизнес и системный анализ весна 2013 лекция 5
Бизнес и системный анализ весна 2013 лекция 5Бизнес и системный анализ весна 2013 лекция 5
Бизнес и системный анализ весна 2013 лекция 5
 
Software Design Patterns
Software Design PatternsSoftware Design Patterns
Software Design Patterns
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.
 
DESIGN PATTERNS? EASY!
DESIGN PATTERNS? EASY!DESIGN PATTERNS? EASY!
DESIGN PATTERNS? EASY!
 
Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.
 
Проектирование_и_архитектура_ПС_2022_L09s.ppt
Проектирование_и_архитектура_ПС_2022_L09s.pptПроектирование_и_архитектура_ПС_2022_L09s.ppt
Проектирование_и_архитектура_ПС_2022_L09s.ppt
 
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПОЕвгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
 
Design Rules And Principles
Design Rules And PrinciplesDesign Rules And Principles
Design Rules And Principles
 
введение в объектно ориентированный анализ
введение в объектно ориентированный анализвведение в объектно ориентированный анализ
введение в объектно ориентированный анализ
 
ооп
оопооп
ооп
 
Практический анализ и визуальное моделирование на UML
Практический анализ и визуальное моделирование на UMLПрактический анализ и визуальное моделирование на UML
Практический анализ и визуальное моделирование на UML
 
Сила парадигмы: обзор парадигм программирования
Сила парадигмы: обзор парадигм программированияСила парадигмы: обзор парадигм программирования
Сила парадигмы: обзор парадигм программирования
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Шаблоны проектирования в Magento
Шаблоны проектирования в MagentoШаблоны проектирования в Magento
Шаблоны проектирования в Magento
 
Ddd happy dev-2013-tsepkov
Ddd happy dev-2013-tsepkovDdd happy dev-2013-tsepkov
Ddd happy dev-2013-tsepkov
 
Unified modeling language basic-part 1
Unified modeling language basic-part 1Unified modeling language basic-part 1
Unified modeling language basic-part 1
 
INFOSYSTEMS. How to Measure Software Architecture [1.01, RUS]
INFOSYSTEMS. How to Measure Software Architecture [1.01, RUS]INFOSYSTEMS. How to Measure Software Architecture [1.01, RUS]
INFOSYSTEMS. How to Measure Software Architecture [1.01, RUS]
 

Mehr von Unguryan Vitaliy

Mehr von Unguryan Vitaliy (20)

Модульное тестирование.
Модульное тестирование. Модульное тестирование.
Модульное тестирование.
 
Stream API
Stream APIStream API
Stream API
 
Архитектурный шаблон MVC
Архитектурный шаблон MVCАрхитектурный шаблон MVC
Архитектурный шаблон MVC
 
Системы контроля версий
Системы контроля версийСистемы контроля версий
Системы контроля версий
 
Принципы SOLID
Принципы SOLIDПринципы SOLID
Принципы SOLID
 
Ввведение в java
Ввведение в javaВвведение в java
Ввведение в java
 
Введение в hibernate
Введение в hibernateВведение в hibernate
Введение в hibernate
 
Spring AOP
Spring AOPSpring AOP
Spring AOP
 
Введение в Spring
Введение в SpringВведение в Spring
Введение в Spring
 
Cookies, session и другое в JSP
Cookies, session и другое в JSPCookies, session и другое в JSP
Cookies, session и другое в JSP
 
JSTL
JSTLJSTL
JSTL
 
JSP
JSPJSP
JSP
 
JDBC
JDBCJDBC
JDBC
 
Сервлеты
СервлетыСервлеты
Сервлеты
 
Сетевое взаимодействие
Сетевое взаимодействиеСетевое взаимодействие
Сетевое взаимодействие
 
Введение в сетевые технологии
Введение в сетевые технологииВведение в сетевые технологии
Введение в сетевые технологии
 
XML
XMLXML
XML
 
Аннотации в java
Аннотации в javaАннотации в java
Аннотации в java
 
java 8
java 8java 8
java 8
 
Java. Многопоточность.
Java. Многопоточность.Java. Многопоточность.
Java. Многопоточность.
 

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

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