Sobes.tech
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() # Инициатор командаға шақыру жасайды
    
    

Артықшылықтары:

  • Инициатор мен қабылдағышты бөледі.
  • Инициаторды әртүрлі командалармен параметрлеуге мүмкіндік береді.
  • Операцияларды болдырмау/қайта орындау мүмкіндігін жеңілдетеді (командалар тарихын сақтау арқылы).
  • Командалар кезегін құрып, олардың орындалуын журналдауға мүмкіндік береді.

Кемшіліктері:

  • Егер көп команда болса, көптеген класс болуы мүмкін.