파이썬 참고 : 명령 모드

같은 패턴의 이름이, 다른 작업의 패턴이 다른 명령으로 수행 할 수있는 명령 모드, 대기열을 사용하여 일련의 명령을 실행할 수 있습니다, 당신은 혼자가 명령을 실행할 수 있습니다. 조작 키의이 모드는 다른 명령 개체 패키지, 디커플링으로 작업을 수행하는 호출자의 경우는 다르다.

커맨드 객체 (즉, 명령, 또는 명령의 각 개체)의 모든 정보를 캡슐화하기위한 명령 모드이 동작의 목적을 완성 할 필요가 객체의 메소드를 포함하여, 트리거 이벤트에 동작 이상을 완료하는데 필요한과 처리에 필요한 파라미터, 즉, 커맨드 객체는 소정의 양호한 동작을 위해 필요한 모든 정보를 캡슐화, 해당 "순서"의 구현은 실행 대응하는 방법, 즉, 사용할 수있는 호출 할 필요가있다. 그것은 여러 가지 작업이 명령의 명령 대신에 객체를 더 만들 수 있도록 일반적으로 우리는 하나 이상의 명령에 사용할 수 있습니다.

명령 모드 세 가지 역할 :

  • 명령 : 명령은 다른 명령을 작성하는 데 사용되는 캡슐화 특정 작업을 객체.
  • 수신기 파라미터 수용체, 즉, 특정한 동작을 수행함으로써.
  • 호출자 : 명령 개체를 호출,이 객체 (큐의 예를 명령 창조자) 다른 명령 개체를 호출합니다.

명령 모드의 핵심 아이디어 :

  • 이 객체에 대한 요청 (즉, 커맨드 객체 캡슐 명령)을 캡슐화한다.
  • 다른 파라미터를 사용하여 클라이언트 요청에 (매개 변수 값은 작업에 따라 다른 명령을 전달).
  • 큐에 저장된 상기 요청을 허용한다.
  • 객체 지향 콜백을 제공합니다.

명령 모드의 장점 :

  • 중간으로 브로커에 Command 개체를 사용하여 호출자의 실행 및 분리하는 작업.
  • 당신은 일련의 명령을 생성하고 관리하기 위해 큐를 사용할 수 있습니다.
  • 새로운 명령이 용이하고 기존 코드의 변경을 필요로하지 않습니다 추가합니다.
  • 당신은 리두 또는 롤백 작업뿐만 아니라 비동기 작업을 달성하기 위해 명령 모드를 사용할 수 있습니다, 단지 해당 명령을 실행해야합니다.

명령 모드의 단점 :

  • 명령 모드는 이렇게 구현 및 유지 관리의 복잡성을 증가, 서로 협력하여 클래스와 객체를 많이 만들어야 할 수도 있습니다.
  • 각 명령은 명령 클래스이기 때문에 너무 많이 주문하는 경우에, 그래서, 그 달성하고 더 많은 문제를 유지합니다.

간단한 예 :

에서 ABC 가져 오기 ABCMeta, AbstractMethod 


클래스 수신기 :
     "" " : 수신기 다양한 방법의 정의는 다른 작업을 수행 할 " "" 
    DEF의 : 조치 1 (셀프)
         인쇄 ( ' 합니다 ... 조치 1 실행을 ' ) 

    DEF 조치 2 (자기) :
         인쇄 ( ' 있습니다 ... 조치 2 실행 ' ) 


클래스에게 명령 (= 그 메타 클래스 ABCMeta을)
     "" " 커맨드 객체 인터페이스 : 명령 실행 방법은, 통합하여 정의 " "" 
    @abstractmethod 
    DEF (자기) 실행 :
         패스 


클래스 조치 1 (명령)
    "" "커맨드 1 동작을 수행하기위한 조치 1 "" " 
    DEF  __init__ (자기, 수신기) 
        self.receiver = 수신기 

    DEF 실행 (자기) 
        self.receiver.action1 () 


클래스 조치 2 (명령어)
     " "" 명령 2 : 동작 조치 2 수행 "" " 
    DEF  __init__ (셀프, 수신기) 
        self.receiver = 수신기 

    DEF 실행] (자기) 
        self.receiver.action2 () 


클래스 : 호출자
     " "" 명령 큐 생성 호출하고 명령 큐를 실행할 "" " 
    DEF  __init__ (자동) : 
        자체.작업 = []

    DEF append_action (자기 행동) 
        self.actions.append (액션) 

    DEF execute_actions (자동)
         에 대한 액션 self.actions : 
            action.execute () 


경우  __name__ == ' __main__ ' : 
    수신기 = 수신기 () 
    조치 1 = 조치 1 (수신기) 
    조치 2 = 조치 2 (수신기) 

    호출자 = 호출자 () 
    invoker.append_action (조치 1) 
    invoker.append_action (조치 2) 
    invoker.execute_actions ()

 

추천

출처www.cnblogs.com/guyuyun/p/11980434.html