파이썬 노트:명령 모드

5897 단어
명령 모드, 모드의 이름과 같이 이 모드의 다른 동작은 모두 다른 명령으로 실행할 수 있으며, 대기열을 사용하여 일련의 명령을 실행할 수도 있고, 단독으로 명령을 실행할 수도 있다.이 모델은 서로 다른 조작을 서로 다른 명령 대상으로 봉하여 조작의 호출자와 집행자를 결합시키는 데 중점을 두고 있다.
명령 모드의 Command 대상(즉 모든 명령, 또는 명령 대상)은 특정한 조작을 완성하거나 이벤트를 촉발할 때 필요한 모든 정보를 봉인하는 데 사용된다. 이 조작을 완성해야 하는 대상, 이 대상의 방법과 이 방법에 필요한 매개 변수, 즉 Command 대상에서 특정한 조작에 필요한 모든 정보를 봉인하고 사용할 때 대응하는excute 방법을 호출하면 된다."이 명령"의 실행을 나타냅니다.일반적으로 우리는 한 개의 명령만 사용하기 때문에 여러 개의 Command 대상을 만들고 여러 개의 다른 조작을 대표하는 명령을 만들 수 있습니다.
명령 모드 역할은 다음과 같습니다.
4
  • Command: 명령 개체, 특정 작업을 캡슐화하여 다른 명령을 작성하는 데 사용합니다

  • 4
  • Receiver: 매개변수 수용자, 즉 특정 작업의 수행자입니다

  • 4
  • Invoker: 명령을 호출하는 객체로, 이 객체는 다른 명령 객체(명령 대기열의 작성자)를 호출합니다

  • 명령 모드 핵심 사상:
    4
  • 요청을 개체로 캡슐화합니다(예: Command 명령 개체로 캡슐화)

  • 4
  • 서로 다른 요청으로 고객을 매개 변수화할 수 있다(조작에 따라 서로 다른 명령을 하는 매개 변수 전송값)

  • 4
  • 요청을 대기열에 저장할 수 있습니다

  • 4
  • 객체에 대한 콜백을 제공합니다

  • 명령 모드의 이점:
    4
  • 조작의 호출자와 집행자를 결합시키고 Command 대상을 중간의 대리자로 사용한다

  • 4
  • 일련의 명령을 만들고 관리하기 위해 대기열을 사용할 수 있습니다

  • 4
  • 새 명령을 추가하는 것이 더 쉽고 기존 코드를 변경할 필요가 없습니다

  • 4
  • 명령 모드를 사용하여 재작업 또는 롤백 작업을 수행할 수 있고 비동기적인 작업을 수행할 수 있으며 대응하는 명령만 실행하면 된다

  • 명령 모드의 단점:
    4
  • 명령 모델은 많은 종류와 대상을 만들어서 서로 협업을 해야 하기 때문에 실현과 유지보수의 복잡도를 증가시켰다

  • 4
  • 모든 명령은 Command 클래스이기 때문에 명령이 너무 많으면 실현과 유지보수가 더욱 번거롭다

  • 간단한 예:
    from abc import ABCMeta, abstractmethod
    
    
    class Receiver:
        """Receiver: """
        def action1(self):
            print('Execute action1...')
    
        def action2(self):
            print('Execute action2...')
    
    
    class Command(metaclass=ABCMeta):
        """"""
        @abstractmethod
        def execute(self):
            pass
    
    
    class Action1(Command):
        """ 1: action1"""
        def __init__(self, receiver):
            self.receiver = receiver
    
        def execute(self):
            self.receiver.action1()
    
    
    class Action2(Command):
        """ 2: action2"""
        def __init__(self, receiver):
            self.receiver = receiver
    
        def execute(self):
            self.receiver.action2()
    
    
    class Invoker:
        """"""
        def __init__(self):
            self.actions = []
    
        def append_action(self, action):
            self.actions.append(action)
    
        def execute_actions(self):
            for action in self.actions:
                action.execute()
    
    
    if __name__ == '__main__':
        receiver = Receiver()
        action1 = Action1(receiver)
        action2 = Action2(receiver)
    
        invoker = Invoker()
        invoker.append_action(action1)
        invoker.append_action(action2)
        invoker.execute_actions()

    좋은 웹페이지 즐겨찾기