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
Commandinterfé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.