Содержание
- 2. Описание взаимодействия объектов и классов адаптированных для решения задачи проектирования в конкретном контексте. Удачные проектные решения,
- 3. Именует, абстрагирует, идентифицирует ключевые аспекты структуры общего решения для повторно используемого дизайна. Вычленяет участвующие классы и
- 4. Это не серебренная пуля, чрезмерное злоупотребление шаблонами пагубно – снижение качества анализа. Это не библиотеки классов,
- 5. Создание словаря предметной области и вспомогательных сущностей; Декомпозиция на объекты; Декомпозиция на классы; Создание модели предметной
- 6. Паттерны проектирования классов/обьектов (Классификация GoF) Архитектурные системные паттерны Паттерны интеграции корпоративных информационных систем
- 7. Design Patterns: Elements of Reusable Object-Oriented Software — книга 1994 года об инженерии программного обеспечения, описывающая
- 9. Структурные паттерны проектирования классов/объектов Адаптер (Adapter) Оболочка (Wrapper) Заместитель (Proxy) Компоновщик (Composite) Мост (Bridge) Приспособленец (Flyweight)
- 10. Адаптер (Adapter)
- 11. Адаптер - Проблема Необходимо обеспечить взаимодействие несовместимых интерфейсов или как создать единый устойчивый интерфейс для нескольких
- 12. Адаптер - Решение Конвертировать исходный интерфейс компонента к другому виду с помощью промежуточного объекта - адаптера,
- 13. Адаптер – Структура
- 14. Адаптер - Пример
- 15. Адаптер - Применимость Необходимо использовать существующий класс, но его интерфейс не соответствует заданным требованиям Создание повторно
- 16. Оболочка (Wrapper)
- 17. Оболочка - Проблема Возложить дополнительные обязанности (прозрачные для клиентов) на отдельный объект, а не на класс
- 18. Оболочка - Рекомендации Применение нескольких «Оболочек" к одному "Компоненту" позволяет произвольным образом сочетать обязанности, например, одно
- 19. Оболочка - Решение Динамически добавить объекту новые обязанности не прибегая при этом к порождению подклассов (наследованию).
- 20. Оболочка - Структура
- 21. Оболочка - Преимущество Большая гибкость, чем у статического наследования: можно добавлять и удалять обязанности во время
- 22. Оболочка - Недостатки «Оболочка» и его "Компонент" не идентичны, и, кроме того, получается что система состоит
- 23. Заместитель (Proxy)
- 24. Заместитель - Проблема Необходимо управлять доступом к объекту, так чтобы создавать громоздкие объекты "по требованию".
- 25. Заместитель - Решение Создать суррогат громоздкого объекта. "Заместитель" хранит ссылку, которая позволяет заместителю обратиться к реальному
- 26. Заместитель - Структура
- 27. Заместитель – Виды Удаленный заместитель : обеспечивает связь с «Субъектом», который находится в другом адресном пространстве
- 28. Компоновщик (Composite)
- 29. Компоновщик - Проблема Как обрабатывать группу или композицию структур объектов одновременно?
- 30. Компоновщик - Решение Определить классы для композитных и атомарных объектов таким образом, чтобы они реализовывали один
- 31. Компоновщик - Структура
- 32. Компоновщик - Использование Необходимо объединять группы схожих объектов и управлять ими. Объекты могут быть как примитивными
- 33. Мост (Bridg)
- 34. Мост - Проблема Требуется отделить абстракцию от реализации так, чтобы и то и другое можно было
- 35. Мост - Решение Поместить абстракцию и реализацию в отдельные иерархии классов.
- 36. Мост - Рекомендации Можно использовать если, например, реализацию необходимо выполнять во время реализации программы.
- 37. Мост - Решение "Абстракция" определяет интерфейс "Абстракции" и хранит ссылку на объект "Реализация", "УточненнаяАбстракция" расширяет интерфейс,
- 38. Мост - Структура
- 39. Мост – Преимущество Отделение реализации от интерфейса, то есть, "Реализацию" "Абстракции" можно конфигурировать во время выполнения.
- 40. Приспособленец (Flyweight)
- 41. Приспособленец - Проблема Необходимо обеспечить поддержку множества мелких объектов.
- 42. Приспособленец - Рекомендации Приспособленцы моделируют сущности, число которых слишком велико для представления объектами. Имеет смысл использовать
- 43. Приспособленец – Решение(1) Создать разделяемый объект, который можно использовать одновременно в нескольких контекстах, причем, в каждом
- 44. Приспособленец – Решение(2) Объект класса "КонкретныйПриспособленец" должен быть разделяемым. Любое сохраняемое им состояние должно быть внутренним,
- 45. Приспособленец - Структура
- 46. Приспособленец - Преимущества Вследствие уменьшения общего числа экземпляров и вынесения состояния экономится память.
- 47. Фасад (Facade)
- 48. Фасад - Проблема Как обеспечить унифицированный интерфейс с набором разрозненных реализаций или интерфейсов, например, с подсистемой,
- 49. Фасад - Решение Определить одну точку взаимодействия с подсистемой - фасадный объект, обеспечивающий общий интерфейс с
- 50. Фасад - Структура
- 51. Паттерны проектирования поведения классов/объектов Интерпретатор Итератор Команда Наблюдатель Посетитель Посредник Состояние Стратегия Хранитель Цепочка обязанностей Шаблонный
- 52. Интерпретатор
- 53. Интерпретатор - Проблема Имеется часто встречающаяся, подверженная изменениям задача.
- 54. Интерпретатор - Решение Создать интерпретатор, который решает данную задачу.
- 55. Интерпретатор - Пример Задача поиска строк по образцу может быть решена посредством создания интерпретатора, определяющего грамматику
- 56. Интерпретатор - Структура
- 57. Интерпретатор - Преимущества Грамматику становится легко расширять и изменять, реализации классов, описывающих узлы абстрактного синтаксического дерева
- 58. Интерпретатор - Недостатки Сопровождение грамматики с большим числом правил затруднительно.
- 59. Итератор (Iterator)
- 60. Итератор - Проблема Составной объект, например, список, должен предоставлять доступ к своим элементам (объектам), не раскрывая
- 61. Итератор - Решение Создается класс "Итератор", коорый определяет интерфейс для доступа и перебора элементов, "КонкретныйИтератор" реализует
- 62. Итератор - Структура
- 63. Итератор - Преимущества Поддерживает различные способы перебора агрегата, одновременно могут быть активны несколько переборов.
- 64. Команда (Command)
- 65. Команда- Проблема Необходимо послать объекту запрос, не зная о том, выполнение какой операции запрошено и кто
- 66. Команда- Решение Инкапсулировать запрос как объект. "Клиент" создает объект "КонкретнаяКоманда", который вызывает операции получателя для выполнения
- 67. Команда - Структура
- 68. Команда- Преимущество Паттерн "Команда" разрывает связь между объектом, инициирующим операции, и объектом, имеющим информацию о том,
- 69. Наблюдатель (Observer)
- 70. Наблюдатель - Проблема Один объект ("Подписчик") должен знать об изменении состояний или некоторых событиях другого объекта.
- 71. Наблюдатель - Решение Определить интерфейс "Подписки". Объекты - подписчики реализуют этот интерфейс и динамически регистрируются для
- 72. Наблюдатель - Структура
- 73. Посетитель (Visitor)
- 74. Посетитель- Проблема Над каждым объектом некоторой структуры выполняется операция. Определить новую операцию, не изменяя классы объектов.
- 75. Посетитель- Решение Клиент, использующий данный паттерн, должен создать объект класса "КонкретныйПосетитель", а затем посетить каждый элемент
- 76. Посетитель- Структура
- 77. Посетитель- Рекомендации Логично использовать, если в структуре присутствуют объекты многих классов с различными интерфейсами, и необходимо
- 78. Посетитель- Преимущества Упрощается добавление новых операций, объединяет родственные операции в классе "Посетитель".
- 79. Посетитель- Недостатки Затруднено добавление новых классов "КонкретныйЭлемент", поскольку требуется объявление новой абстрактной операции в классе "Посетитель".
- 80. Посредник (Mediator)
- 81. Посредник- Проблема Затруднено добавление новых классов "КонкретныйЭлемент", поскольку требуется объявление новой абстрактной операции в классе "Посетитель".
- 82. Посредник- Решение Посредник" определяет интерфейс для обмена информацией с объектами "Коллеги", "КонкретныйПосредник" координирует действия обьектов "Коллеги".
- 83. Посредник- Структура
- 84. Посредник - Преимущества Устраняется связанность между "Коллегами", централизуется управление.
- 85. Состояние (State)
- 86. Состояние - Проблема Варьировать поведение объекта в зависимости от его внутреннего состояния
- 87. Состояние - Решение Класс "Контекст" делегирует зависящие от состояния запросы текущему объекту "КонкретноеСостояние" (хранит экземпляр подкласса
- 88. Состояние - Структура
- 89. Состояние - Преимущества Локализует зависящее от состояния поведение и делит его на части, соответствующие состояниям, переходы
- 90. Стратегия (Strategy)
- 91. Стратегия - Проблема Спроектировать изменяемые, но надежные алгоритмы или стратегии
- 92. Стратегия - Решение Определить для каждого алгоритма или стратегии отдельный класс со стандартным интерфейсом.
- 93. Стратегия - Пример Обеспечение сложной логики вычисления стоимости товаров с учетом сезонных скидок, скидок постоянным клиентам
- 94. Стратегия - Структура
- 95. Хранитель (Memento)
- 96. Хранитель - Проблема Необходимо зафиксировать поведение объекта для реализации, например, механизма отката.
- 97. Хранитель - Решение Зафиксировать и вынести (не нарушая инкапсуляции) за пределы объекта его внутреннее состояние так,
- 98. Хранитель - Структура
- 99. Хранитель - Преимущества Не раскрывается информация, которая доступна только "Хозяину", упрощается структура "Хозяина".
- 100. Хранитель - Недостатки С использованием "Хранителей" могут быть связаны значительные издержки, если "Хозяин" должен копировать большой
- 101. Цепочка обязанностей (Chain of Responsibility)
- 102. Цепочка обязанностей - Проблема Запрос должен быть обработан несколькими объектами.
- 103. Цепочка обязанностей - Рекомендации Логично использовать данный паттерн, если имеется более одного объекта, способного обработать запрос
- 104. Цепочка обязанностей - Решение Связать объекты - получатели запроса в цепочку и передать запрос вдоль этой
- 105. Цепочка обязанностей - Структура
- 106. Цепочка обязанностей - Преимущества Ослабляется связанность (объект не обязан "знать", кто именно обработает его запрос).
- 107. Цепочка обязанностей - Недостатки Нет гарантий, что запрос будет обработан, поскольку он не имеет явного получателя.
- 108. Шаблонный метод (Template Method)
- 109. Шаблонный метод - Проблема Определить алгоритм и реализовать возможность переопределения некоторых шагов алгоритма для подклассов (без
- 110. Шаблонный метод - Решение АбстрактныйКласс" определяет абстрактные Операции(), замещаемые в конкретных подклассах для реализации шагов алгоритма,
- 111. Шаблонный метод - Структура
- 112. Порождающие паттерны проектирования Абстрактная фабрика Одиночка Прототип Строитель Фабричный метод
- 113. Абстрактная фабрика (Abstract Factory, Factory)
- 114. Абстрактная фабрика – Проблема Создать семейство взаимосвязанных или взаимозависимых обьектов (не специфицируя их конкретных классов).
- 115. Абстрактная фабрика – Решение Создать абстрактный класс, в котором объявлен интерфейс для создания конкретных классов.
- 116. Абстрактная фабрика – Структура
- 117. Абстрактная фабрика – Преимущества Изолирует конкретные классы. Поскольку "Абстрактная фабрика" инкапсулирует ответственность за создание классов и
- 118. Абстрактная фабрика – Недостатки Интерфейс "Абстрактной фабрики" фиксирует набор обьектов, которые можно создать. Расширение "Абстрактной фабрики"
- 119. Одиночка (Singleton)
- 120. Одиночка - Проблема Создать класс и определить статический метод класса, возвращающий этот единственный объект.
- 121. Одиночка - Решение Интерфейс "Абстрактной фабрики" фиксирует набор обьектов, которые можно создать. Расширение "Абстрактной фабрики" для
- 123. Разумнее создавать именно статический экземпляр специального класса, а не объявить требуемые методы статическими, поскольку при использовании
- 125. Система не должна зависеть от того, как в ней создаются, компонуются и представляются объекты.
- 126. Создавать новые объекты с помощью паттерна - прототипа. "Прототип" объявляет интерфейс для клонирования самого себя. "Клиент"
- 129. Отделить конструирование сложного объекта от его представления, так чтобы в результате одного и того же конструирования
- 130. "Клиент" создает объект - распорядитель "Директор" и конфигурирует его объектом - "Строителем". "Директор" уведомляет "Строителя" о
- 132. Объект "Строитель" предоставляет объекту "Директор" абстрактный интерфейс для конструирования "Продукта", за которым может скрыть представление и
- 134. Определить интерфейс для создания объекта, но оставить подклассам решение о том, какой класс инстанцировать, то есть,
- 135. Абстрактный класс "Создатель" объявляет ФабричныйМетод, возвращающий объект типа "Продукт" (абстрактный класс, определяющий интерфейс обьектов, создаваемых фабричным
- 137. Избавляет проектировщика от необходимости встраивать в код зависящие от приложения классы.
- 138. Возникает дополнительный уровень подклассов.
- 140. Скачать презентацию