명령 디자인 패턴

의도

  • 요청을 객체로 캡슐화하여 다른 요청,큐 또는 로그 요청 및 지원 가능한 작업으로 고객을 매개 변수화할 수 있습니다.
  • “객체에 대한 메서드 호출”을 전체 객체 상태로 승격
  • 객체 지향 콜백

문제점

요청 중인 작업 또는 요청 수신자에 대해 알지 못한 채 객체에 요청을 실행해야 합니다.

토론

명령은 작업을 수행하는 방법을 알고 있는 작업에서 호출하는 개체를 분리합니다. 이 분리를 달성 하기 위해 디자이너 활동(멤버 함수에 대 한 포인터)와 수신기(개체)를 매핑 하는 추상 기본 클래스를 만듭니다. 기본 클래스에는 단순히 수신기에서 작업을 호출하는execute()메서드가 포함되어 있습니다.

명령 개체의 모든 클라이언트는 개체의”서비스”가 필요할 때마다 개체의 가상execute()메서드를 호출하는 것처럼 각 개체를”블랙 박스”로 취급합니다.

명령 클래스는 다음 중 일부 하위 집합을 보유합니다. 명령의”실행”메서드는 조각을 함께 만듭니다.

명령 객체의 시퀀스는 복합(또는 매크로)명령으로 조합될 수 있다.

구조

명령을 만드는 클라이언트가 실행하는 클라이언트가 아닙니다. 이 분리는 명령의 타이밍 및 시퀀싱에 유연성을 제공합니다. 명령을 객체로 구체화한다는 것은 전달,단계적,공유,테이블에로드 및 기타 다른 객체처럼 계측되거나 조작 될 수 있음을 의미합니다.

명령 개체는 수행해야 할 작업을 알고 있는 한 클라이언트에서 만든”토큰”으로 생각할 수 있으며 이를 수행하기 위한 리소스가 있는 다른 클라이언트에게 전달됩니다.

예제

명령 패턴을 사용하면 요청을 객체로 캡슐화할 수 있으므로 클라이언트가 다른 요청으로 매개 변수화될 수 있습니다.식당에서”확인”은 명령 패턴의 예입니다. 대기자 웨이트리스는 고객의 주문 또는 명령을 받아 수표에 작성하여 그 순서를 캡슐화합니다. 그런 다음 순서는 다음과 같이 큐에 대기합니다.짧은 주문 요리. 각 웨이터가 사용하는”수표”패드는메뉴에 의존하지 않으므로 많은 다른 항목을 요리하는 명령을 지원할 수 있습니다.

검사 목록

  1. execute()과 같은 메서드 시그니처를 사용하여 명령 인터페이스를 정의합니다.
  2. 다음 중 일부 하위 집합을 캡슐화하는 하나 이상의 파생 클래스를 만듭니다.
  3. 지연된 각 실행 요청에 대해 명령 개체를 인스턴스화합니다.
  4. 작성자(일명 발신자)의 명령 객체를 호출자(일명 수신자)에게 전달합니다.
  5. 호출자가execute()시기를 결정합니다.

엄지 손가락의 규칙

  • 책임,명령,중재자 및 관찰자의 사슬은 어떻게 발신자와 수신자를 분리 할 수 있지만 서로 다른 트레이드 오프를 사용합니다.명령은 일반적으로 하위 클래스와 함께 보낸 사람-수신기 연결을 지정합니다.
  • 책임 체인은 명령을 사용하여 요청을 객체로 나타낼 수 있습니다.
  • 명령과 유품은 마법 증표 역할을 하며 나중에 호출한다. 명령에서 토큰은 요청을 나타냅니다. 다형성은 명령하는 것이 중요하지만,그 인터페이스가 너무 좁아서 유품은 아발루로 만 전달 될 수 있기 때문에 유품은 아닙니다.
  • 명령은 유품을 사용하여 협력에 필요한 상태를 유지할 수 있습니다.
  • 매크로 명령은 컴포지트로 구현할 수 있습니다.
  • 기록 목록에 배치되기 전에 복사해야 하는 명령은 프로토타입으로 작동합니다.
  • 명령 패턴의 두 가지 중요한 측면:인터페이스 분리(호출자가 수신기에서 격리 됨),시간 분리(나중에 명시 할 즉시 처리 요청 저장).

우리의 무료 웹 사이트를 지원하고 전자 책을 소유!

  • 22 6405>
  • 406 잘 구조화되고 읽기 쉽고 전문 용어가 없는 페이지
  • 228 명확하고 유용한 일러스트레이션 및 다이어그램
  • 4 개 언어로 된 코드 예제가 포함된 아카이브
  • 지원되는 모든 장치:..

답글 남기기

이메일 주소는 공개되지 않습니다.