Cop.Borovkov.Var3/Lab5-6/lab6.md
2024-12-10 10:34:50 +04:00

8.2 KiB
Raw Permalink Blame History

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

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

Задание

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

    Ограничения

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

Вариант 3 AbstractFactory, FactoryMethod, ObjectPool.

Паттерн AbstractFactory

Паттерн "Абстрактная фабрика" (Abstract Factory) предоставляет интерфейс для создания семейств взаимосвязанных объектов с определенными интерфейсами без указания конкретных типов данных объектов.

Участники

  • AbstractProductA и AbstractProductB абстрактные классы, определяющие интерфейс для классов, объекты которых будут создаваться в программе
  • ProductA1 / ProductA2 и ProductB1 / ProductB2 конкретные классы, представляющие конкретную реализацию абстрактных классов.
  • AbstractFactory - Абстрактный класс фабрики определяет методы для создания объектов. Причем методы возвращают абстрактные продукты, а не их конкретные реализации.
  • Client класс клиента, использующий класс фабрики для создания объектов. При этом он использует исключительно абстрактный класс фабрики AbstractFactory и абстрактные классы продуктов AbstractProductA и AbstractProductB и никак не зависит от их конкретных реализаций.

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

  • IReportFactory (Abstract Factory) интерфейс фабрики для создания отчетов.
  • FivePointReportFactory (Concrete Factory) фабрика для 5-балльной системы.
  • HundredPointReportFactory (Concrete Factory) фабрика для 100-балльной системы.
  • IPerformanceReport (Abstract Product) интерфейс для отчета по успеваемости.
  • FivePointPerformanceReport и HundredPointPerformanceReport (Concrete Products) конкретные реализации отчетов по успеваемости для 5- и 10-балльной систем.
  • ILaggingStudentsReport (Abstract Product) интерфейс для отчета по отстающим студентам.
  • FivePointLaggingStudentsReport и HundredPointLaggingStudentsReport (Concrete Products) отчеты по отстающим студентам для 5- и 10-балльной систем.
  • ReportManager (Client) класс, который обрабатывает отчеты

img_4.png

Паттерн FactoryMethod

Фабричный метод (Factory Method) - это паттерн, который определяет интерфейс для создания объектов некоторого класса, но непосредственное решение о том, объект какого класса создавать происходит в подклассах. То есть паттерн предполагает, что базовый класс делегирует создание объектов классам-наследникам.

Участники:

  • Product интерфейс или абстрактный класс, определяющий структуру создаваемых объектов.
  • ConcreteProductA и ConcreteProductB конкретные реализации интерфейса “Product”, представляющие первый и второй тип продукта.
  • Creator абстрактный класс или интерфейс, который определяет фабричный метод для создания объектов типа “Product”.
  • ConcreteCreatorA и ConcreteCreatorB конкретные реализации “Creator”, которая создаёт объекты типа “ConcreteProductA” и “ConcreteCreatorB” соответственно.

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

  • Product IReport определяет интерфейс для всех отчетов.
  • ConcreteProductA и ConcreteProductB GradeReport и AttendanceReport конкретные реализации интерфейса “IReport”.
  • Creator ReportCreator определяет фабричный метод для создания объектов типа “IReport”.
  • ConcreteCreatorA и ConcreteCreatorB GradeReportCreator и AttendanceReportCreator конкретные реализации “ReportCreator”.

img_5.png

Паттерн ObjectPool

Object Pool (пул объектов) — это поведенческий паттерн, который используется для оптимизации управления ресурсами. Он позволяет многократно использовать уже созданные объекты вместо их повторного создания и уничтожения. Это особенно полезно, когда создание объектов является дорогой операцией с точки зрения времени или ресурсов.

Участники:

  • Pool управляет коллекцией объектов. Отвечает за выдачу и возврат объектов из пула. Решает, когда создавать новый объект или использовать существующий.
  • ReusableObject (повторно используемый объект) - объект, который находится в пуле и может быть многократно использован. Включает логику и состояние объекта.
  • Client - получает объект из пула для использования. Возвращает объект обратно в пул, когда он больше не нужен.

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

  • Pool FormatPool управляет доступностью объектов “Format”. Позволяет выдавать объекты формы обучения для студентов.
  • ReusableObject Format содержит данные, связанные с конкретной формой обучения.
  • Client Student представляет студента и содержит данные о нем.

img_6.png