Рубріки: Теория

Команда на Python: как это работает

Светлана Лазутина

Команда (Сommand) — это паттерн, который позволяет разделять операции и выполнять их независимо друг от друга. Благодаря этому команды можно выстраивать в очереди, откладывать или отменять их выполнение. 

По сути, паттерн инкапсулирует всю информацию, необходимую для выполнения действия или запуска события. Для этого команда представляет запрос в виде объекта. Например, одна и та же кнопка в программе может выполнять разные функции: сначала включать свет, а затем стереосистему или открывать двери гаража. 

Как работает команда на Python?

Чтобы понять, как работает паттерн Сommand, можно посмотреть на схему ниже, но перед этим объясним некоторые термины:

  • Receiver объект, который получает и выполняет команду;
  • Invoker объект, который отправляет команду получателю (например, кнопка);
  • Command Object объект, который содержит всю необходимую информацию для выполнения действия;
  • Client приложение или компонент, который отправляет команды на выполнение к Receiver.

Схема работы паттерна Команда в Python / medium.com

Особенности паттерна: 

  • отделяет классы, запускающие операцию, от объекта, который знает, как выполнить операцию;
  • позволяет создавать последовательность команд, организуя систему очередей;
  • помогает легко и без изменения существующего кода добавлять новые команды;
  • поддерживает отменяемые действия.

Для работы Command взаимодействует большое количество классов и объектов. Поэтому разработчику нужно правильно разрабатывать эти классы.

Пример паттерна Command на Python

import abc

class Command(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def execute(self):
        pass

class LunchCommand(Command):
    def __init__(self, lunch):
        self.lunch = lunch

    def execute(self):
        self.lunch.make_lunch()

class DinnerCommand(Command):
    def __init__(self, dinner):
        self.dinner = dinner

    def execute(self):
        self.dinner.make_dinner()

class Lunch:
    def make_lunch(self):
        print("Lunch is being made")

class Dinner:
    def make_dinner(self):
        print("Dinner is being made")

class MealInvoker:
    def __init__(self, command):
        self.command = command

    def set_command(self, command):
        self.command = command

    def invoke(self):
        self.command.execute()

if __name__ == '__main__':
    lunch = Lunch() # receiver
    command_lunch = LunchCommand(lunch) # concrete command

    dinner = Dinner() # receiver
    command_dinner = DinnerCommand(dinner) # concrete command

    meal_invoker = MealInvoker(command_lunch); # invoker
    meal_invoker.invoke()

    meal_invoker.set_command(command_dinner)
    meal_invoker.invoke()

Результат:

Lunch is being made
Dinner is being made

 

Останні статті

Что такое прокси-сервер: пояснение простыми словами, зачем нужны прокси

Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…

21.11.2024

Что такое PWA приложение? Зачем необходимо прогрессивное веб-приложение

Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…

19.11.2024

Как создать игру на телефоне: программирование с помощью конструктора

Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…

17.11.2024

Google Bard: эффективный аналог ChatGPT

В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…

14.11.2024

Скрипт и программирование: что это такое простыми словами

Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…

12.11.2024

Дедлайн в разработке: что это такое простыми словами

Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…

11.11.2024