5 работа без диограмм
This commit is contained in:
parent
264e4bc95a
commit
376d82e4c0
@ -1,5 +1,4 @@
|
|||||||
using Lab3.Database.DTO;
|
using Lab3.Database.DTO;
|
||||||
using System.Globalization;
|
|
||||||
|
|
||||||
namespace Lab3.Models
|
namespace Lab3.Models
|
||||||
{
|
{
|
||||||
|
88
Lab5-6/lab5.md
Normal file
88
Lab5-6/lab5.md
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
# Лабораторная работа №5.
|
||||||
|
# Применение структурных паттернов.
|
||||||
|
|
||||||
|
## Задание
|
||||||
|
1) Дать описание паттернов, указанных во вариантах, для каких целей они могут применяться,
|
||||||
|
какие участники там фигурируют.
|
||||||
|
2) На основе задания из 3 лабораторной работы, для каждого паттерна придумать сущности,
|
||||||
|
относящиеся к той же предметной области, что описаны в задании и реализация которых
|
||||||
|
бы в приложении потребовала применения паттерна.
|
||||||
|
### Ограничения:
|
||||||
|
- На каждый паттерн свои сущности
|
||||||
|
- В качестве источника сущностей использовать предметную область задания 3 лабораторной работы, а не элементы разработки (что-то типа «У меня паттерн Singleton, укажу ка я класс-подключение к БД через него», не принимается).
|
||||||
|
3) Создать диаграммы классов, отражающие взаимодействие новых
|
||||||
|
сущностей (а также используемый паттерн) с классами,
|
||||||
|
созданными в рамках 3 лабораторной работы. Отдельно отметить
|
||||||
|
классы, которые являются участниками паттерна
|
||||||
|
|
||||||
|
## Вариант 3: _Adapter, Composite, Proxy_
|
||||||
|
### Паттерн Adapter
|
||||||
|
Паттерн Адаптер используется для того,
|
||||||
|
чтобы объекты с несовместимыми интерфейсами могли работать вместе.
|
||||||
|
Он оборачивает один интерфейс в другой,
|
||||||
|
делая несовместимые классы совместимыми без изменения их исходного кода.
|
||||||
|
|
||||||
|
Задачи, которые решает паттерн Adapter:
|
||||||
|
- Интеграция стороннего кода или библиотек:
|
||||||
|
когда требуется использовать стороннюю библиотеку с вашим приложением,
|
||||||
|
но её интерфейс отличается от имеющегося интерфейса.
|
||||||
|
- Обратная совместимость: когда нужно подключить новый код к старому интерфейсу, не изменяя существующий.
|
||||||
|
- Упрощение взаимодействия: уменьшает сложность работы с несколькими несовместимыми компонентами.
|
||||||
|
|
||||||
|
Участники:
|
||||||
|
- Target: представляет объекты, которые используются клиентом.
|
||||||
|
- Client: использует объекты Target для реализации своих задач.
|
||||||
|
- Adaptee: представляет адаптируемый класс, который хотелось бы использовать у клиента вместо объектов Target.
|
||||||
|
- Adapter: сам адаптер, который позволяет работать с объектами Adaptee как с объектами Target.
|
||||||
|
|
||||||
|
**Пример реализации для рассматриваемой предметной области:**<br>
|
||||||
|
|
||||||
|
Классы, реализующие паттерн:
|
||||||
|
- StudentDTO (Target) – определяет модель, которую клиент ожидает использовать для работы со студентами
|
||||||
|
- StudentRepository (Client) – использует StudentDTO
|
||||||
|
- Student (Adaptee) – Модель доступная из базы данных
|
||||||
|
- IMapper (Adapter) – Преобразует Student в StudentDTO
|
||||||
|
|
||||||
|
### Паттерн 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) - Передаёт информацию студенту через старосту
|
Loading…
Reference in New Issue
Block a user