명령 모드
명령 모드 (명령 패턴)는 모델 형에 속하는, 데이터 기반 디자인 패턴이다. 요청 객체의 패키지 형태로 명령 및 호출하는 객체에 전달. 통화 상대의 목적은 적절한 커맨드 객체를 처리 할 수 있고,이 명령은 명령을 실행하여 해당 개체로 전달한다.
소개
의도 : 객체로 요청을 캡슐화, 그래서 당신은 클라이언트를 매개 변수화하는 다른 요청을 사용할 수 있습니다.
주로 해결 : 소프트웨어 시스템, 요청자와 행동의 문제는 일반적으로 단단히 결합의 관계를 얻을 수 있지만, 이러한 실행 취소 또는 다시 녹음을 수행 할 필요가, 그리고 다른 트랜잭션 처리,이 저항 할 수없는 등의 상황, 엄격하게 설계 변경을 결합하는 것은 적절하지 않다.
사용하는 경우 : 같은 동작에 관해서는 어떤 경우에 다른 치료 "기록 / 다시 실행, 거래 취소"이러한 변화는 꽉 커플 링이 부적절 저항 할 수 있습니다.이 경우, 어떻게 "행동 요청"과 "행동의 구현은"디커플링 것입니까? 추상 객체의 집합으로서 작용, 느슨하게 결합은 둘 사이에 달성 될 수있다.
해결 방법 : 순서로, 발신자 전화를받는 사람에 의해 실행 호출자 수신기 → → 명령.
키 코드 세가지 역할의 정의 : (1)는 명령 입력을 사용하여 실제의 명령 실행 요소 2, 커맨드 3, 호출자 객체를 수신
적용 예 : 클래스 모델 층은 서로 다른 응용 프로그램이 다른 모델 클래스, 콘크리트 명령에 해당이 될 것입니다 동안 작업에 스트럿 1코어 컨트롤러 ActionServlet이는 단 하나, 호출자의 것과 동일합니다.
장점 : 1, 시스템은 커플 링의 정도를 감소시킨다.이 새로운 명령은 쉽게 시스템에 추가 될 수있다.
단점 : 명령 모드는 일부 시스템이 너무 많은 특정 명령 클래스가 원인이 될 수 있습니다.
사용 시나리오 : 로컬 명령과 같은 명령 모드에서 사용할 수있는, 1, GUI 각 버튼 명령이다.2 CMD 시뮬레이션.
참고 :이 시스템은, 명령 모드를 사용하여 고려할 수 명령 취소 (취소) 및 복구 작업 (다시 실행) 작업을 지원해야합니다, 확장 된 명령 모드를 참조하십시오.
실현
우리는 먼저 요청스톡클래스를 생성 한 후주문하고있는명령 인터페이스로 만들었습니다.BuyStockSellStock는주문인터페이스를 구현 엔티티 및 명령 클래스는, 상기 실제 명령 처리를 수행한다. 주문 및 주문을 받아 들일 수 호출 개체 클래스브로커로만들었습니다.
명령을 수행하는 개체를 결정하는 명령의 종류에 근거하여 명령 모드를 이용하여브로커 개체.CommandPatternDemo는브로커클래스를 사용하여 우리의 데모 클래스는 명령 모드를 설명합니다.
1 단계
명령 인터페이스를 만듭니다.
Order.java
공용 인터페이스 주문 { () 실행 무효; }
2 단계
요청 클래스를 만듭니다.
Stock.java
공용 클래스 재고 { 개인 문자열 이름 = "ABC"; 개인 INT 양 = 10; 공공 무효 구매 () { 에서 System.out.println ( "증권 [이름 :"+ 이름 + ", 수량 : "+ 수량 +은"]) "을 구입하신; } 공공 무효 판매 () { 에서 System.out.println ( "증권 [이름 :"+ 이름 + ", 수량 : "+ 수량 +"] 판매 "); } }
3 단계
만들기 엔티티 클래스주문이인터페이스를 구현합니다.
BuyStock.java
공용 클래스 BuyStock 주문을 {구현 개인 주식 abcStock; 공공 BuyStock (주식 abcStock) { this.abcStock = abcStock; } 공공 무효 (실행) { abcStock.buy (); } }
SellStock.java
공용 클래스 SellStock 주문을 {구현 개인 주식 abcStock; 공공 SellStock (주식 abcStock) { this.abcStock = abcStock; } 공공 무효 (실행) { abcStock.sell (); } }
4 단계
명령을 호출하는 클래스를 만듭니다.
Broker.java
수입 인 java.util.ArrayList; 가져 오기를 java.util.List; 공용 클래스 브로커 { 개인 목록 <주문> orderList = 새로운 ArrayList를 <주문> (); 공공 무효 takeOrder (주문 순서) { orderList.add (위해); } 공공 무효 placeOrders () { 대한 (주문 순서 : orderList) { order.execute (); } orderList.clear (); } }
5 단계
수락하고 명령을 실행하기 위해 브로커 클래스를 사용합니다.
CommandPatternDemo.java
공용 클래스 CommandPatternDemo { 공공 정적 무효 메인 (문자열 []에 args) { 주식 abcStock = 새로운 주식 (); BuyStock buyStockOrder = 새로운 BuyStock (abcStock); SellStock sellStockOrder = 새로운 SellStock (abcStock); 브로커 브로커 = 새 브로커 (); broker.takeOrder (buyStockOrder); broker.takeOrder (sellStockOrder); broker.placeOrders (); } }
6 단계
출력을 확인합니다.
구입 증권 [10 이름 : ABC, 수량] 선주문 [10 이름 : ABC, 수량]