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