Паттерн "Компоновщик" используется для организации задач в иерархическую структуру, где задачи могут содержать другие задачи. В данном коде класс Task
является абстрактным компонентом, представляющим общий интерфейс для всех задач. Классы DevelopmentTask
, TestingTask
и DesignTask
наследуются от Task
и представляют конкретные листовые компоненты, то есть задачи, которые не содержат других задач. Методы AddTask
и RemoveTask
в этих классах реализованы так, чтобы добавление или удаление задач из листовых компонентов было невозможно. Также, у каждой задачи есть методы Assign
и Complete
, которые назначают задачу и помечают ее как завершенную соответственно.
Паттерн "Состояния" используется для изменения поведения объекта в зависимости от его состояния. В данном коде состояние задачи представлено интерфейсом ITaskState
, а конкретные состояния задачи (новая, в работе, завершена) реализованы классами NewState
, InProgressState
и CompletedState
соответственно. В данном примере каждая задача имеет только одно состояние, которое меняется при вызове метода ProcessTask()
. Каждое состояние задачи выводит сообщение о текущем состоянии на консоль.
В программе происходит создание иерархии задач, их назначение и завершение. Когда задача назначается, выводится сообщение о том, что задача назначена соответствующему исполнителю. При завершении задачи выводится сообщение о ее завершении.
Данная программа использует такие паттерны как: паттерн компоновщика и состояния.
Паттерн "Компоновщик" предоставляет способ структурирования объектов в иерархию древовидной структуры и работу с ними единообразно. #Ключевые элементы:
- Компонент (Component): Определяет интерфейс для всех компонентов в древовидной структуре. Может быть как листовым компонентом, так и составным компонентом.
- Листовой компонент (Leaf): Представляет конечный элемент в древовидной структуре, который не имеет вложенных компонентов.
- Составной компонент (Composite): Представляет компонент, который может содержать в себе другие компоненты (как листовые, так и составные) и определяет операции для работы с ними.
Данный паттерн полезен, когда нужно работать с ерархической структурой объектов, а также когда необходимо применять однородны еоперации как к отдельным объектам, так и к группам объектов.
Паттерн "Состояния" позволяет объекту изменять свое поведение в зависимости от своего внутреннего состояния. Это позволяет достичь гибкости в поведении объекта без необходимости изменения его класса. #Ключевые элементы:
- Контекст (Context): Хранит ссылку на текущий объект состояния и делегирует ему вызовы операций.
- Состояние (State): Определяет интерфейс для конкретных состояний и реализует поведение, связанное с этим состоянием.
- Конкретные состояния (Concrete States): Представляют различные состояния, в которых может находиться объект. Реализуют операции, связанные с соответствующим состоянием.
Паттерн состояние полезен, когда объект может находиться в различных состояниях, и его поведение должно изменяться в зависимости от текущего состояния. Он позволяет избежать длинных цепочек условных операторов и делает код более гибким и легким в поддержке.
Оба этих паттерна помогают достичь гибкости и расширяемости код
![Снимок экрана 2023-06-06 в 00 57 09](https://private-user-images.githubusercontent.com/112942681/243485751-8d4f4b18-baa5-40de-b1a8-c77fad16565e.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM1NDQ4NDMsIm5iZiI6MTcyMzU0NDU0MywicGF0aCI6Ii8xMTI5NDI2ODEvMjQzNDg1NzUxLThkNGY0YjE4LWJhYTUtNDBkZS1iMWE4LWM3N2ZhZDE2NTY1ZS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwODEzJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDgxM1QxMDIyMjNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT00YWFmMGQwNjg3MjE4OWVlNWU1ZjRmYjUzNGU3YWMyYzVmOGUxODc1YTgwNDliYTdiNWRmZDY0ZDYxOTIzMjk0JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.wEa8IZKc7ErGnn9dUZgkcvfTQI7yDMK-DSHBE-lfqsI)