# Лабораторная работа №7. # Применение структурных паттернов. ## Задание 1) Дать описание паттернов, указанных во вариантах, для каких целей они могут применяться, какие участники там фигурируют. 2) На основе задания из 3 лабораторной работы, для каждого паттерна придумать сущности, относящиеся к той же предметной области, что описаны в задании и реализация которых бы в приложении потребовала применения паттерна. ### Ограничения - На каждый паттерн свои сущности - В качестве источника сущностей использовать предметную область задания 3 лабораторной работы, а не элементы разработки (что-то типа «У меня паттерн Singleton, укажу ка я класс-подключение к БД через него», не принимается). 3) Создать диаграммы классов, отражающие взаимодействие новых сущностей (а также используемый паттерн) с классами, созданными в рамках 3 лабораторной работы. Отдельно отметить классы, которые являются участниками паттерна ## Вариант 3 _Mediator, Mediator (2 различных реализации), Strategy._ ### Паттерн Mediator Паттерн "Посредник" (Mediator) представляет такой шаблон проектирования, который обеспечивает взаимодействие множества объектов без необходимости ссылаться друг на друга. Тем самым достигается слабосвязанность взаимодействующих объектов. Участники - Mediator - представляет интерфейс для взаимодействия с объектами Colleague. - Colleague - представляет интерфейс для взаимодействия с объектом Mediator. - ConcreteColleague1 и ConcreteColleague2 - конкретные классы коллег, которые обмениваются друг с другом через объект Mediator. - ConcreteMediator - конкретный посредник, реализующий интерфейс типа Mediator. Классы, реализующие паттерн: - Secretary Mediator - Секретарь - Client Colleague - Участник вузовской системы - Teacher ConcreteColleague1 - Преподователь - Student ConcreteColleague2 - Студент - Dean`s Office ConcreteMediator - Деканат ![img_8.png](img_8.png) - ILms Mediator - Сайт лмс - User Colleague - Пользователь лмс - Teacher ConcreteColleague1 - Преподователь - Student ConcreteColleague2 - Студент - Lms ConcreteMediator - Логика сайта лмс ![img_7.png](img_7.png) ### Паттерн Strategy Strategy (Стратегия) — шаблон проектирования, который определяет набор алгоритмов, инкапсулирует каждый из них и обеспечивает их взаимозаменяемость. В зависимости от ситуации мы можем легко заменить один используемый алгоритм другим. При этом замена алгоритма происходит независимо от объекта, который использует данный алгоритм. Участники: - IStrategy: интерфейс, который определяет метод Algorithm(). Это общий интерфейс для всех реализующих его алгоритмов. Вместо интерфейса здесь также можно было бы использовать абстрактный класс. - ConcreteStrategy1 и ConcreteStrategy2: классы, которые реализуют интерфейс IStrategy, предоставляя свою версию метода Algorithm(). Подобных классов-реализаций может быть множество. - Context: класс, который хранит ссылку на объект IStrategy и связан с интерфейсом IStrategy отношением агрегации. Классы, реализующие паттерн: - IStrategy IStudentWorkChecker – общий интерфейс для всех стратегий проверку индивидуальной работы студента. - СourseWorkChecker, LabWorkChecker - классы, реализующие проверку ирс - Context Teacher – Преподаватель выбирает подходящцю стратегию для проверки работы ![img_10.png](img_10.png)