Содержание
- 2. Iterator паттерн
- 3. Назначение паттерна Iterator Предоставляет способ последовательного доступа ко всем элементам составного объекта, не раскрывая его внутреннего
- 4. Решаемая проблема Вам необходим механизм "абстрактного" обхода различных структур данных так, что могут определяться алгоритмы, способные
- 5. Составной объект, такой как список, должен предоставлять способ доступа к его элементам без раскрытия своей внутренней
- 6. Ключевая идея состоит в том, чтобы ответственность за доступ и обход переместить из составного объекта на
- 7. Если вы хотите одновременно поддерживать четыре вида структур данных (массив, бинарное дерево, связанный список и хэш-таблица)
- 8. Когда использовать итераторы? Когда необходимо осуществить обход объекта без раскрытия его внутренней структуры Когда имеется набор
- 9. Структура паттерна Iterator
- 10. Участники Iterator: определяет интерфейс для обхода составных объектов Aggregate: определяет интерфейс для создания объекта-итератора ConcreteIterator: конкретная
- 11. Теперь рассмотрим конкретный пример. Допустим, у нас есть классы книги и библиотеки: class Book { public
- 12. у нас есть класс читателя, который хочет получить информацию о книгах, которые находятся в библиотеке. И
- 13. Интерфейс IBookIterator представляет итератор наподобие интерфейса IEnumerator. Роль интерфейса составного агрегата представляет тип IBookNumerable. Клиентом здесь
- 14. 1. Назначение экземпляра класса ConcreteAggregate - хранить элементы, которые надо будет перебирать. 2. Назначение экземпляра класса
- 15. Mediator (посредник) паттерн
- 16. Назначение паттерна Mediator Mediator делает систему слабо связанной, избавляя объекты от необходимости ссылаться друг на друга,
- 17. Решаемая проблема Мы хотим спроектировать систему с повторно используемыми компонентами, однако существующие связи между этими компонентами
- 18. В Unix права доступа к системным ресурсам определяются тремя уровнями: владелец, группа и прочие. Группа представляет
- 19. Структура паттерна Mediator
- 20. Участники Mediator: представляет интерфейс для взаимодействия с объектами Colleague Colleague: представляет интерфейс для взаимодействия с объектом
- 21. Когда используется паттерн Посредник? Когда имеется множество взаимосвязаных объектов, связи между которыми сложны и запутаны. Когда
- 22. Пример паттерна Mediator Паттерн Mediator определяет объект, управляющий набором взаимодействующих объектов. Слабая связанность достигается благодаря тому,
- 23. Пример Система создания программных продуктов включает ряд акторов: заказчики, программисты, тестировщики и так далее. Но нередко
- 24. class Program { static void Main(string[] args) { ManagerMediator mediator = new ManagerMediator(); Colleague customer =
- 25. Класс менеджера - ManagerMediator в методе Send() проверяет, от кого пришло сообщение, и в зависимости от
- 26. Консольный вывод программы: Сообщение программисту: Есть заказ, надо сделать программу Сообщение тестеру: Программа готова, надо протестировать
- 27. В итоге применение паттерна Посредник дает нам следующие преимущества: Устраняется сильная связанность между объектами Colleague Упрощается
- 28. Использование паттерна Mediator Определите совокупность взаимодействующих объектов, связанность между которыми нужно уменьшить. Инкапсулируйте все взаимодействия в
- 29. Особенности паттерна Mediator Паттерны Chain of Responsibility, Command, Mediator и Observer показывают, как можно разделить отправителей
- 30. Momento паттерн
- 31. Назначение паттерна Memento Не нарушая инкапсуляции, паттерн Memento получает и сохраняет за пределами объекта его внутреннее
- 32. Решаемая проблема Вам нужно восстановить объект обратно в прежнее состояние (те есть выполнить операции "Отмена" или
- 33. Клиент запрашивает Memento (хранителя) у исходного объекта, когда ему необходимо сохранить состояние исходного объекта (установить контрольную
- 34. Паттерн проектирования Memento определяет трех различных участников: Originator (хозяин) - объект, умеющий создавать хранителя, а также
- 35. Структура паттерна Memento
- 36. Пример паттерна Memento Паттерн Memento фиксирует и сохраняет за пределами объекта его внутреннее состояние так, чтобы
- 38. Использование паттерна Memento Определите роли "смотрителя" и "хозяина". Создайте класс Memento и объявите хозяина другом. Смотритель
- 39. Особенности паттерна Memento Паттерны Command и Memento определяют объекты "волшебная палочка", которые передаются от одного владельца
- 40. Когда использовать Memento? Когда нужно охранить его состояние объекта для возможного последующего восстановления Когда сохранение состояния
- 41. Участники Memento: хранитель, который сохраняет состояние объекта Originator и предоставляет полный доступ только этому объекту Originator
- 42. пример: нам надо сохранять состояние игрового персонажа в игре:
- 43. class Program { static void Main(string[] args) { Hero hero = new Hero(); hero.Shoot(); // делаем
- 44. Консольный вывод программы: Производим выстрел. Осталось 9 патронов Сохранение игры. Параметры: 9 патронов, 5 жизней Производим
- 45. Использование паттерна Memento дает нам следующие преимущества: Уменьшение связанности системы Сохранение инкапсуляции информации Определение простого интерфейса
- 46. Observer(наблюдатель) паттерн
- 47. Назначение паттерна Observer Паттерн Observer определяет зависимость "один-ко-многим" между объектами так, что при изменении состояния одного
- 48. Решаемая проблема Имеется система, состоящая из множества взаимодействующих классов. При этом взаимодействующие объекты должны находиться в
- 49. Паттерн Observer определяет объект Subject, хранящий данные (модель), а всю функциональность "представлений" делегирует слабосвязанным отдельным объектам
- 50. Структура паттерна Observer Subject представляет главную (независимую) абстракцию. Observer представляет изменяемую (зависимую) абстракцию. Субъект извещает наблюдателей
- 52. Участники IObservable: представляет наблюдаемый объект. Определяет три метода: AddObserver() (для добавления наблюдателя), RemoveObserver() (удаление набюдателя) и
- 53. Пример паттерна Observer Паттерн Observer определяет зависимость "один-ко-многим" между объектами так, что при изменении состояния одного
- 55. Использование паттерна Observer Проведите различия между основной (или независимой) и дополнительной (или зависимой) функциональностями. Смоделируйте "независимую"
- 56. Особенности паттерна Observer Паттерны Chain of Responsibility, Command, Mediator и Observer показывают, как можно разделить отправителей
- 57. Допустим, у нас есть биржа, где проходят торги, и есть брокеры и банки, которые следят за
- 58. class Program { static void Main(string[] args) { Stock stock = new Stock(); Bank bank =
- 59. Здесь наблюдаемый объект представлен интерфейсом IObservable, а наблюдатель - интерфейсом IObserver. Реализацией интерфейса IObservable является класс
- 60. State (состояние) паттерн
- 61. Назначение паттерна State Паттерн State позволяет объекту изменять свое поведение в зависимости от внутреннего состояния. Создается
- 62. Решаемая проблема Поведение объекта зависит от его состояния и должно изменяться во время выполнения программы. Такую
- 63. Паттерн State решает указанную проблему следующим образом: Вводит класс Context, в котором определяется интерфейс для внешнего
- 64. Структура паттерна State Класс Context определяет внешний интерфейс для клиентов и хранит внутри себя ссылку на
- 66. Участники паттерна State: определяет интерфейс состояния Классы StateA и StateB - конкретные реализации состояний Context: представляет
- 67. Пример паттерна State Паттерн State позволяет объекту изменять свое поведение в зависимости от внутреннего состояния. Похожая
- 69. Использование паттерна State Определите существующий или создайте новый класс-"обертку" Context, который будет использоваться клиентом в качестве
- 70. Особенности паттерна State Объекты класса State часто бывают одиночками. Flyweight показывает, как и когда можно разделять
- 71. Например, вода может находиться в ряде состояний: твердое, жидкое, парообразное. Допустим, нам надо определить класс Вода,
- 72. class Program { static void Main(string[] args) { Water water = new Water(WaterState.LIQUID); water.Heat(); water.Frost(); water.Frost();
- 73. Вода имеет три состояния, и в каждом методе нам надо смотреть на текущее состояние, чтобы произвести
- 74. class Program { static void Main(string[] args) { Water water = new Water(new LiquidWaterState()); water.Heat(); water.Frost();
- 75. Таким образом, реализация паттерна Состояние позволяет вынести поведение, зависящее от текущего состояния объекта, в отдельные классы,
- 77. Скачать презентацию