diff --git a/Lab5-6/img_4.png b/Lab5-6/img_4.png new file mode 100644 index 0000000..e0663a1 Binary files /dev/null and b/Lab5-6/img_4.png differ diff --git a/Lab5-6/img_5.png b/Lab5-6/img_5.png new file mode 100644 index 0000000..754ce33 Binary files /dev/null and b/Lab5-6/img_5.png differ diff --git a/Lab5-6/img_6.png b/Lab5-6/img_6.png new file mode 100644 index 0000000..caa59af Binary files /dev/null and b/Lab5-6/img_6.png differ diff --git a/Lab5-6/lab6.md b/Lab5-6/lab6.md index 2e11678..93cf5b7 100644 --- a/Lab5-6/lab6.md +++ b/Lab5-6/lab6.md @@ -7,15 +7,86 @@ 2) На основе задания из 3 лабораторной работы, для каждого паттерна придумать сущности, относящиеся к той же предметной области, что описаны в задании и реализация которых бы в приложении потребовала применения паттерна. - ### Ограничения: + ### Ограничения - На каждый паттерн свои сущности - - В качестве источника сущностей использовать предметную область задания 3 лабораторной работы, а не элементы разработки (что-то типа «У меня паттерн Singleton, укажу ка я класс-подключение к БД через него», не принимается). + - В качестве источника сущностей использовать предметную область задания 3 лабораторной работы, + а не элементы разработки (что-то типа «У меня паттерн Singleton, + укажу ка я класс-подключение к БД через него», не принимается). 3) Создать диаграммы классов, отражающие взаимодействие новых сущностей (а также используемый паттерн) с классами, созданными в рамках 3 лабораторной работы. Отдельно отметить классы, которые являются участниками паттерна -## Вариант 3: _AbstractFactory, FactoryMethod, ObjectPool._ +## Вариант 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) \ No newline at end of file