Sobes.tech
Middle+

Mi az a 'Parancs' (Command) minta?

sobes.tech MI

Válasz az MI-től

A "Parancs" minta egy viselkedéses tervezési minta, amely egy kérését önálló objektummá alakítja, amely tartalmazza az összes információt erről a kérésről. Ez az átalakítás lehetővé teszi:

  • Ügyfélobjektumok paraméterezését különböző kérésekkel
  • Kérések sorba állítását vagy naplózását
  • A műveletek visszavonásának támogatását

A minta fő résztvevői:

  • Parancs (Command): Deklarálja az interfészt a művelet végrehajtásához.
  • Konkrét parancs (Concrete Command): Megvalósítja a Command interfészt, és meghatározza a kötést a fogadó és a művelet között. A fogadó módszereinek hívásával hajtja végre a műveletet.
  • Fogadó (Receiver): Az osztály, amely tudja, hogyan hajtsa végre a szükséges műveleteket.
  • Hívó (Invoker): Az objektum, amely kérvényezi a parancs végrehajtását. Semmit sem tud a konkrét parancsról vagy a fogadóról.
# Parancs interfész
class Command:
    def execute(self):
        pass

# Konkrét parancs
class ConcreteCommand(Command):
    def __init__(self, receiver, argument):
        self._receiver = receiver  # Fogadó
        self._argument = argument

    def execute(self):
        self._receiver.action(self._argument)

# Fogadó
class Receiver:
    def action(self, arg):
        print(f"Művelet végrehajtása argumentummal: {arg}")

# Hívó
class Invoker:
    def set_command(self, command):
        self._command = command

    def execute_command(self):
        self._command.execute()

# Példa a használatra
receiver = Receiver()
command = ConcreteCommand(receiver, "Helló, Parancs!")
invoker = Invoker()
invoker.set_command(command)
invoker.execute_command()

A "Parancs" minta akkor hasznos, ha:

  • Késleltetett műveletvégrehajtás: Lehetőség a parancsok későbbi végrehajtására.
  • Parancssorok: Parancsok sorozatának felépítése a végrehajtáshoz.
  • Műveletek visszavonása (undo): A parancsok állapotának mentése azok visszavonásához.
  • Műveletek naplózása: A végrehajtott parancsok történetének rögzítése.