Sobes.tech
Middle

'Команда' (Command) үлгіс деген эмне?

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() # Инициатор командасын чакырат
    

Артыкчылыктары:

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

Кемчиликтери:

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