Как преобразовать код C# с помощью шаблона проектирования Command

Как преобразовать код C# с помощью шаблона проектирования Command

22 февраля 2023 г.

Шаблон разработки команд — это один из поведенческих шаблонов проектирования, используемый для инкапсуляции запроса в виде объекта, что позволяет параметризовать клиентов с различными запросами, ставить в очередь или регистрировать запросы, а также поддерживать операции отмены.

В этой статье мы обсудим шаблон проектирования команд в C# на примере.

Предпосылки

  • Базовые знания концепций ООП.

* Любое знание языков программирования.

В статье демонстрируются шаблоны проектирования команд с использованием языка программирования 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>


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE