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

7.9 KiB
Raw Blame History

Лабораторная работа №5.

Применение структурных паттернов.

Задание

  1. Дать описание паттернов, указанных во вариантах, для каких целей они могут применяться, какие участники там фигурируют.
  2. На основе задания из 3 лабораторной работы, для каждого паттерна придумать сущности, относящиеся к той же предметной области, что описаны в задании и реализация которых бы в приложении потребовала применения паттерна.

    Ограничения:

    • На каждый паттерн свои сущности
    • В качестве источника сущностей использовать предметную область задания 3 лабораторной работы, а не элементы разработки (что-то типа «У меня паттерн Singleton, укажу ка я класс-подключение к БД через него», не принимается).
  3. Создать диаграммы классов, отражающие взаимодействие новых сущностей (а также используемый паттерн) с классами, созданными в рамках 3 лабораторной работы. Отдельно отметить классы, которые являются участниками паттерна

Вариант 3: Adapter, Composite, Proxy

Паттерн Adapter

Паттерн Адаптер используется для того, чтобы объекты с несовместимыми интерфейсами могли работать вместе. Он оборачивает один интерфейс в другой, делая несовместимые классы совместимыми без изменения их исходного кода.

Задачи, которые решает паттерн Adapter:

  • Интеграция стороннего кода или библиотек: когда требуется использовать стороннюю библиотеку с вашим приложением, но её интерфейс отличается от имеющегося интерфейса.
  • Обратная совместимость: когда нужно подключить новый код к старому интерфейсу, не изменяя существующий.
  • Упрощение взаимодействия: уменьшает сложность работы с несколькими несовместимыми компонентами.

Участники:

  • Target: представляет объекты, которые используются клиентом.
  • Client: использует объекты Target для реализации своих задач.
  • Adaptee: представляет адаптируемый класс, который хотелось бы использовать у клиента вместо объектов Target.
  • Adapter: сам адаптер, который позволяет работать с объектами Adaptee как с объектами Target.

Пример реализации для рассматриваемой предметной области:

Классы, реализующие паттерн:

  • IStudentTracker (Target) Интерфейс системы отслеживания успеваемости студентов
  • StudentManager (Client) Использует данные о успеваемости, для определеня судьбы студентов
  • AttendanceTracker (Adaptee) Реализализовывает систему отслеживания посещаемости студентов
  • StudentTrackerAdapter (Adapter) "оборачивает" стороннюю систему и преобразует её в интерфейс, ожидаемый клиентом

img_3.png

Паттерн Composite

Паттерн Компоновщик (Composite) объединяет группы объектов в древовидную структуру по принципу "часть-целое и позволяет клиенту одинаково работать как с отдельными объектами, так и с группой объектов.

Образно реализацию паттерна можно представить в виде меню, которое имеет различные пункты. Эти пункты могут содержать подменю, в которых, в свою очередь, также имеются пункты. То есть пункт меню служит с одной стороны частью меню, а с другой стороны еще одним меню. В итоге мы однообразно можем работать как с пунктом меню, так и со всем меню в целом.

Участники:

  • Component определяет интерфейс для всех компонентов в древовидной структуре
  • Composite представляет компонент, который может содержать другие компоненты и реализует механизм для их добавления и удаления
  • Leaf представляет отдельный компонент, который не может содержать другие компоненты
  • Client клиент, который использует компоненты

Классы, реализующие паттерн:

  • IStudent (Component) Студент обучающийся в вузе
  • Group (Composite) Группировка студентов (групаа в потоке, поток, курс...)
  • Student (Leaf) Конкретный студент
  • University (Client) Обеспечивает обучение студентов

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