# Лабораторная работа №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](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](img_5.png) ### Паттерн ObjectPool Object Pool (пул объектов) — это поведенческий паттерн, который используется для оптимизации управления ресурсами. Он позволяет многократно использовать уже созданные объекты вместо их повторного создания и уничтожения. Это особенно полезно, когда создание объектов является дорогой операцией с точки зрения времени или ресурсов. Участники: - Pool – управляет коллекцией объектов. Отвечает за выдачу и возврат объектов из пула. Решает, когда создавать новый объект или использовать существующий. - ReusableObject (повторно используемый объект) - объект, который находится в пуле и может быть многократно использован. Включает логику и состояние объекта. - Client - получает объект из пула для использования. Возвращает объект обратно в пул, когда он больше не нужен. Классы, реализующие паттерн: - Pool FormatPool – управляет доступностью объектов “Format”. Позволяет выдавать объекты формы обучения для студентов. - ReusableObject Format – содержит данные, связанные с конкретной формой обучения. - Client Student – представляет студента и содержит данные о нем. ![img_6.png](img_6.png)