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

Команда на 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

 

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

Обучение Power BI – какие онлайн курсы аналитики выбрать

Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…

13.01.2024

Work.ua назвал самые конкурентные вакансии в IТ за 2023 год

В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…

08.12.2023

Украинская IT-рекрутерка создала бесплатный трекер поиска работы

Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…

07.12.2023

Mate academy отправит работников в 10-дневный оплачиваемый отпуск

Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…

07.12.2023

Переписки, фото, история браузера: киевский программист зарабатывал на шпионаже

Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…

07.12.2023

Как вырасти до сеньйора? Девелопер создал популярную подборку на Github

IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…

07.12.2023