diff --git a/Lab5-6/img_9.png b/Lab5-6/img_9.png new file mode 100644 index 0000000..e62d229 Binary files /dev/null and b/Lab5-6/img_9.png differ diff --git a/Lab5-6/lab7.md b/Lab5-6/lab7.md index 78b1f84..ff3b36f 100644 --- a/Lab5-6/lab7.md +++ b/Lab5-6/lab7.md @@ -49,3 +49,23 @@ - Lms ConcreteMediator - Логика сайта лмс ![img_7.png](img_7.png) + +### Паттерн Strategy + +Strategy (Стратегия) — шаблон проектирования, который определяет набор алгоритмов, инкапсулирует каждый из них и обеспечивает их взаимозаменяемость. В зависимости от ситуации мы можем легко заменить один используемый алгоритм другим. При этом замена алгоритма происходит независимо от объекта, который использует данный алгоритм. + +Участники: + +- IStrategy: интерфейс, который определяет метод Algorithm(). Это общий интерфейс для всех реализующих его алгоритмов. Вместо интерфейса здесь также можно было бы использовать абстрактный класс. +- ConcreteStrategy1 и ConcreteStrategy2: классы, которые реализуют интерфейс IStrategy, предоставляя свою версию метода Algorithm(). Подобных классов-реализаций может быть множество. +- Context: класс, который хранит ссылку на объект IStrategy и связан с интерфейсом IStrategy отношением агрегации. + +Классы, реализующие паттерн: + +- IStrategy IReportStrategy – общий интерфейс для всех стратегий формирования отчетов. +- PdfReportStrategy, ExcelkReportStrategy, WordReportStrategy - классы, реализующие формирование отчета в pdf, excel и word. +- Context ReportContext – контекст, который использует стратегию для формирования отчета. + +Этот подход позволяет легко добавлять новые форматы отчетов (например, JSON или HTML) без изменения существующего кода, реализуя принцип открытости/закрытости. + +![img_9.png](img_9.png) \ No newline at end of file