Cop.Borovkov.Var3/Lab5-6/lab5.md
2024-12-10 10:00:58 +04:00

94 lines
7.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Лабораторная работа №5.
# Применение структурных паттернов.
## Задание
1) Дать описание паттернов, указанных во вариантах, для каких целей они могут применяться,
какие участники там фигурируют.
2) На основе задания из 3 лабораторной работы, для каждого паттерна придумать сущности,
относящиеся к той же предметной области, что описаны в задании и реализация которых
бы в приложении потребовала применения паттерна.
### Ограничения:
- На каждый паттерн свои сущности
- В качестве источника сущностей использовать предметную область задания 3 лабораторной работы, а не элементы разработки (что-то типа «У меня паттерн Singleton, укажу ка я класс-подключение к БД через него», не принимается).
3) Создать диаграммы классов, отражающие взаимодействие новых
сущностей (а также используемый паттерн) с классами,
созданными в рамках 3 лабораторной работы. Отдельно отметить
классы, которые являются участниками паттерна
## Вариант 3: _Adapter, Composite, Proxy_
### Паттерн Adapter
Паттерн Адаптер используется для того,
чтобы объекты с несовместимыми интерфейсами могли работать вместе.
Он оборачивает один интерфейс в другой,
делая несовместимые классы совместимыми без изменения их исходного кода.
Задачи, которые решает паттерн Adapter:
- Интеграция стороннего кода или библиотек:
когда требуется использовать стороннюю библиотеку с вашим приложением,
но её интерфейс отличается от имеющегося интерфейса.
- Обратная совместимость: когда нужно подключить новый код к старому интерфейсу, не изменяя существующий.
- Упрощение взаимодействия: уменьшает сложность работы с несколькими несовместимыми компонентами.
Участники:
- Target: представляет объекты, которые используются клиентом.
- Client: использует объекты Target для реализации своих задач.
- Adaptee: представляет адаптируемый класс, который хотелось бы использовать у клиента вместо объектов Target.
- Adapter: сам адаптер, который позволяет работать с объектами Adaptee как с объектами Target.
**Пример реализации для рассматриваемой предметной области:**<br>
Классы, реализующие паттерн:
- IStudentTracker (Target) Интерфейс системы отслеживания успеваемости студентов
- StudentManager (Client) Использует данные о успеваемости, для определеня судьбы студентов
- AttendanceTracker (Adaptee) Реализализовывает систему отслеживания посещаемости студентов
- StudentTrackerAdapter (Adapter) "оборачивает" стороннюю систему и преобразует её в интерфейс, ожидаемый клиентом
![img_3.png](img_3.png)
### Паттерн Composite
Паттерн Компоновщик (Composite) объединяет группы объектов в древовидную структуру
по принципу "часть-целое и позволяет клиенту одинаково работать как с отдельными объектами,
так и с группой объектов.
Образно реализацию паттерна можно представить в виде меню,
которое имеет различные пункты. Эти пункты могут содержать подменю, в которых,
в свою очередь, также имеются пункты. То есть пункт меню служит с одной стороны частью меню,
а с другой стороны еще одним меню. В итоге мы однообразно можем работать как с пунктом меню,
так и со всем меню в целом.
Участники:
- Component определяет интерфейс для всех компонентов в древовидной структуре
- Composite представляет компонент, который может содержать другие компоненты
и реализует механизм для их добавления и удаления
- Leaf представляет отдельный компонент, который не может содержать другие компоненты
- Client клиент, который использует компоненты
Классы, реализующие паттерн:
- IStudent (Component) Студент обучающийся в вузе
- Group (Composite) Группировка студентов (групаа в потоке, поток, курс...)
- Student (Leaf) Конкретный студент
- University (Client) Обеспечивает обучение студентов
![img.png](img.png)
### Паттерн Proxy
Паттерн Заместитель (Proxy) предоставляет объект-заместитель, который управляет доступом к другому объекту.
То есть создается объект-суррогат, который может выступать в роли другого объекта и замещать его.
Участники:
- Subject определяет общий интерфейс для Proxy и RealSubject. Поэтому Proxy может использоваться вместо RealSubject
- RealSubject представляет реальный объект, для которого создается прокси
- Proxy заместитель реального объекта. Хранит ссылку на реальный объект, контролирует к нему доступ,
может управлять его созданием и удалением. При необходимости Proxy переадресует запросы объекту RealSubject
- Client использует объект Proxy для доступа к объекту RealSubject
Классы, реализующие паттерн:
- IStudent (Subject) Студент
- Student (RealSubject) Студент из группы
- Elder (Proxy) Староста отвечает на вопросы преподователя, при надомности спрашивает студентов группы
- Lecturer (Client) - Задаёт вопросы студентам через старосту
![img_2.png](img_2.png)