Middle
Команда
sobes.tech AI
AI-дан жауап
Құлықтық паттерн жобалау, ол сұранысты жеке объектке айналдырады, ол сұраныс туралы барлық ақпаратты қамтиды. Бұл объектілердің әдістерін әртүрлі сұраныстармен параметрлеуге, сұраныстарды кезекке қоюға немесе журналдауға мүмкіндік береді, сондай-ақ операцияларды болдырмауға қолдау көрсетеді.
Паттерннің негізгі элементтері:
- Команда (Command): сұранысты орындау әдісін жариялайтын абстрактілі класс немесе интерфейс.
// Команда интерфейсі class Command: def execute(self): pass - Нақты команда (Concrete Command):
Commandинтерфейсін жүзеге асырады және қабылдағышты әрекетке байланыстырады. Қабылдағышта орындалуы тиіс әрекеттер жиынтығын анықтайды.// Құрылғыны қосу командасы class LightOnCommand(Command): def __init__(self, light): self._light = light # Қабылдағыш def execute(self): self._light.on() - Қабылдағыш (Receiver): нақты жұмысты қалай орындау керектігін білетін класс. Біздің мысалда бұл
Light.// Қабылдағыш - әрекеттер орындалатын объект class Light: def on(self): print("Жарық қосылды") def off(self): print("Жарық өшірілді") - Инициатор (Invoker): командадан әрекетті орындауды сұрайтын объект. Ол нақты команда немесе қабылдағыш туралы білмейді.
// Инициатор - командаға шақыру жасайды class RemoteControl: def set_command(self, command): self._command = command def press_button(self): self._command.execute() - Клиент (Client):
Concrete Commandобъектілерін құрып, олардыReceiver-ге байланыстырады. Содан кейін команданыInvoker-ге жібереді.// Клиент коды if __name__ == "__main__": light = Light() # Қабылдағыш light_on_command = LightOnCommand(light) # Нақты команда remote = RemoteControl() # Инициатор remote.set_command(light_on_command) # Команданы инициаторға беру remote.press_button() # Инициатор командаға шақыру жасайды
Артықшылықтары:
- Инициатор мен қабылдағышты бөледі.
- Инициаторды әртүрлі командалармен параметрлеуге мүмкіндік береді.
- Операцияларды болдырмау/қайта орындау мүмкіндігін жеңілдетеді (командалар тарихын сақтау арқылы).
- Командалар кезегін құрып, олардың орындалуын журналдауға мүмкіндік береді.
Кемшіліктері:
- Егер көп команда болса, көптеген класс болуы мүмкін.