Как преобразовать код C# с помощью шаблона проектирования Command
22 февраля 2023 г.Шаблон разработки команд — это один из поведенческих шаблонов проектирования, используемый для инкапсуляции запроса в виде объекта, что позволяет параметризовать клиентов с различными запросами, ставить в очередь или регистрировать запросы, а также поддерживать операции отмены.
В этой статье мы обсудим шаблон проектирования команд в C# на примере.
Предпосылки
- Базовые знания концепций ООП.
* Любое знание языков программирования.
В статье демонстрируются шаблоны проектирования команд с использованием языка программирования C#. Итак, для начала C#
C# существует уже довольно давно, и он продолжает развиваться, приобретая все новые и новые функции. .medium.com
Цели обучения
- Как писать код с использованием шаблона команды адаптера
Начало работы
Введение в шаблон проектирования команд
Шаблон проектирования команд отделяет объект, который вызывает операцию, от объекта, который знает, как ее выполнить. Шаблон предоставляет способ связать запросы с вещами, где каждый запрос представлен как объект со своими свойствами и методами.
Важнейшими элементами шаблона команды являются:
* Командный интерфейс: определяет стандартный интерфейс для всех команд.
* Конкретная команда: реализует командный интерфейс и реализует метод execute.
* Invoker Содержит ссылку на команду и вызывает команду при необходимости.
* Получатель: знает, как выполнять операции, связанные с командой.
Пример шаблона разработки команд в C
Давайте рассмотрим пример простого калькулятора, который может выполнять арифметические операции, такие как сложение, вычитание, умножение и деление.
Мы можем использовать шаблон проектирования команд для реализации этих операций в виде команд.
Во-первых, мы создадим командный интерфейс, который будет определять общий интерфейс для всех команд. Этот интерфейс будет иметь метод execute, который будут реализовывать конкретные команды.
public interface ICommand
{
void Execute();
}
Далее мы создадим конкретные классы команд для каждой операции, которые будут реализовывать интерфейс ICommand и предоставлять реализацию для метода execute.
public class AdditionCommand : ICommand
{
private readonly Calculator _calculator;
private readonly int _operand;
public AdditionCommand(Calculator calculator, int operand)
{
_calculator = calculator;
_operand = operand;
}
public void Execute()
{
_calculator.Add(_operand);
}
}
public class SubtractionCommand : ICommand
{
private readonly Calculator _calculator;
private readonly int _operand;
public SubtractionCommand(Calculator calculator, int operand)
{
_calculator = calculator;
_operand = operand;
}
public void Execute()
{
_calculator.Subtract(_operand);
}
}
public class MultiplicationCommand : ICommand
{
private readonly Calculator _calculator;
private readonly int _operand;
public MultiplicationCommand(Calculator calculator, int operand)
{
_calculator = calculator;
_operand = operand;
}
public void Execute()
{
_calculator.Multiply(_operand);
}
}
public class DivisionCommand : ICommand
{
private readonly Calculator _calculator;
private readonly int _operand;
public DivisionCommand(Calculator calculator, int operand)
{
_calculator = calculator;
_operand = operand;
}
public void Execute()
{
_calculator.Divide(_operand);
}
}
}
Класс Calculator будет выступать в роли получателя и знать, как выполнять арифметические операции.
public class Calculator
{
private int _result;
public void Add(int operand)
{
_result += operand;
}
public void Subtract(int operand)
{
_result -= operand;
}
public void Multiply(int operand)
{
_result *= operand;
}
public void Divide(int operand)
{
if (operand != 0)
{
_result /= operand;
}
}
public int GetResult()
{
return _result;
}
}
Наконец, мы создадим класс Invoker, который будет содержать ссылку на команду и вызывать ее при необходимости.
public class CalculatorInvoker
{
private ICommand _command;
public void SetCommand(ICommand command)
{
_command = command;
}
public void ExecuteCommand()
{
_command.Execute();
}
}
Теперь давайте посмотрим, как эти классы могут выполнять арифметические операции. п
static void Main(string[] args) {
Calculator calculator = new Calculator();
CalculatorInvoker invoker = new CalculatorInvoker();
// Create commands for arithmetic operations
AdditionCommand additionCommand = new AdditionCommand(calculator, 5);
SubtractionCommand subtractionCommand = new SubtractionCommand(calculator, 3);
MultiplicationCommand multiplicationCommand = new MultiplicationCommand(calculator, 2);
DivisionCommand divisionCommand = new DivisionCommand(calculator, 4);
// Execute commands using invoker
invoker.SetCommand(additionCommand);
invoker.ExecuteCommand();
invoker.SetCommand(subtractionCommand);
invoker.ExecuteCommand();
invoker.SetCommand(multiplicationCommand);
invoker.ExecuteCommand();
invoker.SetCommand(divisionCommand);
invoker.ExecuteCommand();
// Get result from calculator
int result = calculator.GetResult();
Console.WriteLine("Result: " + result); // Output: Result: 1
}
В приведенном выше примере мы создали четыре конкретных объекта команд для арифметических операций и использовали Invoker для выполнения этих команд. Invoker не знает об определенных командах; он знает только о командном интерфейсе.
Конкретные элементы управления инкапсулируют объект-получатель (калькулятор) и аргументы, необходимые для операций.
Заключение
В целом шаблон разработки команд обеспечивает гибкий и расширяемый способ инкапсуляции запросов в виде объектов и отделения объекта, который вызывает операцию, от объекта, который знает, как ее выполнять.
Таким образом, шаблон проектирования команд — это полезный способ отделить объект, который вызывает операцию, от объекта, который знает, как ее выполнить.
Он предоставляет способ связать запросы с вещами, где каждый запрос представлен как объект со своими свойствами и методами. В C# мы можем использовать интерфейсы и классы для реализации этого шаблона.
Подпишитесь на меня
Публикация C#, LinkedIn, Instagram, Twitter, Dev.to, Купи мнекофе
Также опубликовано здесь< /a>
Оригинал