Содержание
- 2. Что такое «хороший дизайн» Точного универсально ответа нет и быть не может (скорее можно сказать, что
- 3. Канонические паттерны (GoF-паттерты) GoF – Gang of Four («банда четырех») – Э. Гамма, Р. Хелм, Р.
- 4. Определения Паттерны проектирования – описание взаимодействия объектов и классов, адаптированных для решения общей задачи проектирования в
- 5. Что НЕ является паттерном Готовые классы (в том числе и повторно используемые) Структуры данных Потоки И
- 6. Элементы паттерна (GoF) Имя Как устоявшийся профессиональный термин может использоваться для четкого описания архитектурного решения в
- 7. Описание паттерна (GoF) Название и классификация паттерна Назначение Известен также под именем Мотивация Применимость Структура Участники
- 8. Для чего применяются паттерны Для создания «хорошего дизайна» Инкапсуляция Повторное использование Снижение зависимостей И т.д.
- 9. Механизмы повторного использования Наследование («прозрачный ящик») Наследование класса определяется статически на этапе компиляции Нарушение инкапсуляции родителя
- 10. Классификация GoF-паттернов Порождающие паттерны Отвечают за создание объектов Структурные паттерны Организуют структуру классов (на этапе разработки)
- 11. Пространство GoF-паттернов
- 12. Отношения между GoF-паттернами
- 13. Как выбирать паттерн проектирования Подумайте, как паттерны решают проблемы проектирования Пролистайте разделы каталога, описывающие назначение паттернов
- 14. Как пользоваться паттерном проектирования Прочитайте описание паттерна, чтобы получить о нем общее представление Вернитесь назад и
- 15. Когда использовать паттерны Необоснованное использование паттернов может существенно усложнить программу, поэтому применять паттерны нужно, или когда
- 16. Графическая нотация OMT (Object Modeling Technique) OMT (Object Modeling Technique) – один из методов ООАП и
- 17. OMT, диаграммы классов
- 18. OMT, описание классов Класс обозначается прямоугольником В верхней части напечатано имя класса Описание переменных располагается ниже
- 19. OMT, связи между классами Инстанцирование Наследование Агрегирование Осведомленность (ассоциация, использование)
- 20. Агрегирование и осведомленность И агрегирование и осведомленность – способы композиции объектов и делегирования функциональности Агрегирование Один
- 21. OMT, диаграммы объектов
- 22. OMT, описание объектов В диаграммах объектов приводятся только экземпляры в какой-то определенный момент времени Для обозначения
- 23. ОМТ, диаграммы взаимодействия
- 24. OMT, описание взаимодействий Время на диаграммах взаимодействий откладывается сверху вниз Сплошная вертикальная черта означает время жизни
- 25. Порождающие паттерны Фабричный метод (Factory Method) Абстрактная фабрика (Abstract Factory) Прототип (Prototype) Строитель (Builder) Одиночка (Singleton)
- 26. Порождающие паттерны, причина появления Казалось бы, все классы создаются вызовом своего конструктора, зачем вводить порождающие паттерны?
- 27. Фабричный метод (Factory Method), задача Определяет интерфейс для создания объекта абстрактного (редко конкретного) типа, но скрывает
- 28. Делегирование инстанцирования подклассам В данном конкретном случае является частным случаем абстрактной фабрики с одним видом продукта
- 29. Фабричный метод (Factory Method), пример с созданием документов
- 30. Абстрактная фабрика (Abstract Factory), задача Предоставляет интерфейс для создания семейств взаимосвязанных или взаимозависимых объектов, не специфицируя
- 31. Абстрактная фабрика (Abstract Factory), диаграмма классов
- 32. Абстрактная фабрика (Abstract Factory), пример с различн. оконными системами
- 33. Абстрактная фабрика (Abstract Factory), результаты изолирует конкретные классы упрощает замену семейств продуктов гарантирует сочетаемость продуктов поддержать
- 34. Абстрактная фабрика (Abstract Factory), замечания Нетрудно заметить, что абстрактная фабрика реализуется с помощью фабричных методов
- 35. Прототип (Prototype), задача Задает виды создаваемых объектов с помощью экземпляра-прототипа и создает новые объекты путем копирования
- 36. Прототип (Prototype), диаграмма классов
- 37. Прототип (Prototype), замечания Каждый подкласс Prototype должен реализовывать метод Clone() В .NET FCL существует интерфейс IClonable,
- 38. Строитель (Builder), задача Отделяет конструирование сложного объекта от его представления, так что в результате одного и
- 39. Строитель (Builder), диаграмма классов
- 40. Строитель (Builder), диаграмма взаимодействия
- 41. Одиночка (Singleton), задача Используется, чтобы гарантировать единственность экземпляра класса Например, в системе может быть много принтеров,
- 42. Одиночка (Singleton), диаграмма классов
- 43. Одиночка (Singleton), пример кода public class Singleton { private static Singleton instance; private int singletonData=10; protected
- 44. Одиночка (Singleton), замечания С помощью данного паттерна могут быть реализованы другие, например, абстрактная фабрика, строитель
- 45. Структурные паттерны Адаптер (Adapter) Декоратор (Decorator) Заместитель (Proxy) Компоновщик (Composite) Мост (Bridge) Приспособленец (Flyweight) Фасад (Facade)
- 46. Адаптер (Adapter), задача Преобразует интерфейс одного класса в интерфейс другого, который ожидают клиенты Адаптер обеспечивает совместную
- 47. Адаптер (Adapter), диаграмма классов 1-ый вариант (адаптер объекта) – композиция объектов 2-ой вариант (адаптер класса) –
- 48. Адаптер (Adapter), пример: TextReader, StreamReader, Stream из FCL TextReader – Target string ReadLine() string ReadToEnd() StreamReader
- 49. Мост (Bridge), задача Отделить абстракцию от ее реализации так, чтобы то и другое можно было изменять
- 50. Мост (Bridge), диаграмма классов
- 51. Мост (Bridge), пример с графическими библиотеками
- 52. Мост (Bridge), замечания Конкретная реализация, как правило, будет порождаться одним из порождающих паттернов
- 53. Компоновщик (Composite), задача Компонует объекты в древовидные структуры для представления иерархий часть-целое Позволяет клиентам единообразно трактовать
- 54. Компоновщик (Composite), диаграмма классов
- 55. Компоновщик (Composite), диаграмма объектов
- 56. Декоратор (Decorator), задача Динамически добавляет объекту новые обязанности Является гибкой альтернативой порождению подклассов с целью расширения
- 57. Декоратор (Decorator), диаграмма классов
- 58. Декоратор (Decorator), диаграмма объектов (цепочка декораторов)
- 59. Декоратор (Decorator), пример с полосами прокрутки
- 60. Фасад (Facade), задача Предоставляет унифицированный интерфейс вместо набора интерфейсов некоторой подсистемы Определяет интерфейс более высокого уровня,
- 61. Фасад (Facade), возможная диаграмма классов
- 62. Приспособленец (Flyweight) Использует разделение для эффективной поддержки множества мелких объектов
- 63. Заместитель (Proxy), задача Является суррогатом другого объекта и контролирует доступ к нему Используется в случаях: удаленный
- 64. Заместитель (Proxy), диаграмма классов
- 65. Заместитель (Proxy), диаграмма объектов
- 66. Заместитель и классы UnmutableList, UnmutableMap и т.д. Классы UnmutableList, UnmutableMap и т.д. из 1-го практического задания
- 67. Паттерны поведения Интерпретатор (Interpreter) Итератор (Iterator) Команда (Command) Наблюдатель (Observer) Посетитель (Visitor) Посредник (Mediator) Состояние (State)
- 68. Цепочка обязанностей (Chain of Responsibility), задача Позволяет избежать привязки отправителя запроса к его получателю, давая шанс
- 69. Цепочка обязанностей (Chain of Responsibility), диаграмма классов
- 70. Цепочка обязанностей (Chain of Responsibility), диаграмма объектов Следует учитывать, что объекты, участвующие в паттерне, могут быть
- 71. Цепочка обязанностей (Chain of Responsibility), результаты ослабление связанности дополнительная гибкость при распределении обязанностей между объектами получение
- 72. Команда (Command), задача Инкапсулирует запрос как объект, позволяя тем самым задавать параметры клиентов для обработки соответствующих
- 73. Команда (Command), диаграмма классов
- 74. Команда (Command), диаграмма взаимодействия
- 75. Интерпретатор (Interpreter), задача Для заданного языка определяет представление его грамматики, а также интерпретатор предложений этого языка
- 76. Итератор (Iterator), задача Предоставляет способ последовательного доступа ко всем элементам составного объекта, не раскрывая его внутреннего
- 77. Итератор (Iterator), диаграмма классов
- 78. Итератор (Iterator), возникающие вопросы Кто из участников управляет итерацией? Клиент (внешний или пассивный итератор) Агрегат (внутренний
- 79. Итератор (Iterator), реализация в C# Итераторы могут быть обобщенными - IEnumerable Языковые средства для итерации по
- 80. Посредник (Mediator), задача Определяет объект, инкапсулирующий способ взаимодействия множества объектов Посредник обеспечивает слабую связанность системы, избавляя
- 81. Посредник (Mediator), диаграмма классов
- 82. Посредник (Mediator), диаграмма объектов
- 83. Посредник (Mediator), пример с диалоговым окном
- 84. Хранитель (Memento), задача Не нарушая инкапсуляции, фиксирует и выносит за пределы объекта его внутреннее состояние так,
- 85. Хранитель (Memento), диаграмма классов
- 86. Хранитель (Memento), диаграмма взаимодействия
- 87. Хранитель (Memento), Реализация в .NET Часто вместо паттерна Хранитель можно использовать механизм сериализации/десериализации
- 88. Наблюдатель (Observer), задача Определяет зависимость типа «один ко многим» между объектами таким образом, что при изменении
- 89. Наблюдатель (Observer), диаграмма классов
- 90. Наблюдатель (Observer), диаграмма взаимодействия
- 93. Скачать презентацию