Cop.Borovkov.Var3/Lab5-6/lab5.md

90 lines
7.8 KiB
Markdown
Raw Normal View History

2024-12-09 22:36:53 +04:00
# Лабораторная работа №5.
# Применение структурных паттернов.
## Задание
1) Дать описание паттернов, указанных во вариантах, для каких целей они могут применяться,
какие участники там фигурируют.
2) На основе задания из 3 лабораторной работы, для каждого паттерна придумать сущности,
относящиеся к той же предметной области, что описаны в задании и реализация которых
бы в приложении потребовала применения паттерна.
### Ограничения:
- На каждый паттерн свои сущности
- В качестве источника сущностей использовать предметную область задания 3 лабораторной работы, а не элементы разработки (что-то типа «У меня паттерн Singleton, укажу ка я класс-подключение к БД через него», не принимается).
3) Создать диаграммы классов, отражающие взаимодействие новых
сущностей (а также используемый паттерн) с классами,
созданными в рамках 3 лабораторной работы. Отдельно отметить
классы, которые являются участниками паттерна
## Вариант 3: _Adapter, Composite, Proxy_
### Паттерн Adapter
Паттерн Адаптер используется для того,
чтобы объекты с несовместимыми интерфейсами могли работать вместе.
Он оборачивает один интерфейс в другой,
делая несовместимые классы совместимыми без изменения их исходного кода.
Задачи, которые решает паттерн Adapter:
- Интеграция стороннего кода или библиотек:
когда требуется использовать стороннюю библиотеку с вашим приложением,
но её интерфейс отличается от имеющегося интерфейса.
- Обратная совместимость: когда нужно подключить новый код к старому интерфейсу, не изменяя существующий.
- Упрощение взаимодействия: уменьшает сложность работы с несколькими несовместимыми компонентами.
Участники:
- Target: представляет объекты, которые используются клиентом.
- Client: использует объекты Target для реализации своих задач.
- Adaptee: представляет адаптируемый класс, который хотелось бы использовать у клиента вместо объектов Target.
- Adapter: сам адаптер, который позволяет работать с объектами Adaptee как с объектами Target.
**Пример реализации для рассматриваемой предметной области:**<br>
Классы, реализующие паттерн:
2024-12-10 09:20:34 +04:00
- IStudentTracker (Target) Интерфейс системы отслеживания успеваемости студентов
- StudentManager (Client) Использует данные о успеваемости, для определеня судьбы студентов
- UniversitySystem (Adaptee) Реализализовывает систему отслеживания успеваемости студентов
- StudentTrackerAdapter (Adapter) "оборачивает" стороннюю систему и преобразует её в интерфейс, ожидаемый клиентом
![img.png](img.png)
2024-12-09 22:36:53 +04:00
### Паттерн Composite
Паттерн Компоновщик (Composite) объединяет группы объектов в древовидную структуру
по принципу "часть-целое и позволяет клиенту одинаково работать как с отдельными объектами,
так и с группой объектов.
Образно реализацию паттерна можно представить в виде меню,
которое имеет различные пункты. Эти пункты могут содержать подменю, в которых,
в свою очередь, также имеются пункты. То есть пункт меню служит с одной стороны частью меню,
а с другой стороны еще одним меню. В итоге мы однообразно можем работать как с пунктом меню,
так и со всем меню в целом.
Участники:
- Component определяет интерфейс для всех компонентов в древовидной структуре
- Composite представляет компонент, который может содержать другие компоненты
и реализует механизм для их добавления и удаления
- Leaf представляет отдельный компонент, который не может содержать другие компоненты
- Client клиент, который использует компоненты
Классы, реализующие паттерн:
- path (Component) путь к объекту на диске
- FolderPath (Composite) Путь к папке
- FilePath (Leaf) Путь к файлу
- FormMain (Client) Просматревает дерево папок в поисках файлов с типом .dll
### Паттерн Proxy
Паттерн Заместитель (Proxy) предоставляет объект-заместитель, который управляет доступом к другому объекту.
То есть создается объект-суррогат, который может выступать в роли другого объекта и замещать его.
Участники:
- Subject определяет общий интерфейс для Proxy и RealSubject. Поэтому Proxy может использоваться вместо RealSubject
- RealSubject представляет реальный объект, для которого создается прокси
- Proxy заместитель реального объекта. Хранит ссылку на реальный объект, контролирует к нему доступ,
может управлять его созданием и удалением. При необходимости Proxy переадресует запросы объекту RealSubject
- Client использует объект Proxy для доступа к объекту RealSubject
Классы, реализующие паттерн:
- Студент (Subject) Абстрактный студент
- Студент из группы (RealSubject) студент из конкретной группы
- Староста (Proxy) Передаёт информацию студенту
- Преподаватель (Client) - Передаёт информацию студенту через старосту