큰소리 디자인 모델 23: 명령 모드 (양 꼬치 구 이 가 가 져 온 사고)

명령 모드:
        요청 을 대상 으로 밀봉 하여 서로 다른 요청 으로 고객 을 매개 변수 화하 고 요청 대기 열 이나 요청 로 그 를 기록 하 며 취소 작업 을 지원 합 니 다.
//      
public abstract class Command {

	private Barbecuer barbecuer;

	public Command(Barbecuer bar) {
		this.barbecuer = bar;
	}

	public abstract void excuteCommand();

	public Barbecuer getBarbecuer() {
		return barbecuer;
	}

	public void setBarbecuer(Barbecuer barbecuer) {
		this.barbecuer = barbecuer;
	}
}

//      
public class BakeChickenWingCommand extends Command {

	public BakeChickenWingCommand(Barbecuer bar) {
		super(bar);
	}

	@Override
	public void excuteCommand() {
		this.getBarbecuer().bakeChickenWing();
	}

}

//       
public class BakeMuttonCommand extends Command {

	public BakeMuttonCommand(Barbecuer bar) {
		super(bar);
	}

	@Override
	public void excuteCommand() {
		this.getBarbecuer().bakeMutton();
	}

}

//       
public class Barbecuer {

	//    
	public void bakeMutton() {
		System.out.println("Bake the mutton!");
	}
	
	//    
	public void bakeChickenWing() {
		System.out.println("Bake the chicken wing!");
	}
}

//    
public class Waiter {

	public List<Command> orders = new ArrayList<Command>();
    
	//     
	public void setOrder(Command com) {
		orders.add(com);
		System.out.println("add an order " + new Date());
	}
	
	//     
	public void cancelOrder(Command com) {
		orders.remove(com);
		System.out.println("Cancel the order " + new Date());
	}
	
	//     
	public void inform() {
		for (Command c : orders) {
			c.excuteCommand();
		}
	}
}

public class CommandMain {

	public static void main(String[] args) {
		// 1,       
		Barbecuer boy = new Barbecuer();
		Command command1 = new BakeMuttonCommand(boy);
		Command command2 = new BakeMuttonCommand(boy);
		Command command3 = new BakeChickenWingCommand(boy);
		
		// 2,     ,    
		Waiter waiter = new Waiter();
		waiter.setOrder(command1);
		waiter.setOrder(command2);
		waiter.setOrder(command3);
		
		// 3,     ,    
		waiter.inform();
		
		// 4,     
		waiter.cancelOrder(command2);
		waiter.inform();
	}

}

명령 모드 역할:
        1. 명령 대기 열 을 쉽게 설계 할 수 있 습 니 다.
        2. 필요 한 경우 명령 을 로그 에 쉽게 계산 할 수 있 습 니 다.
        3. 청 구 를 받 아들 일 수 있 는 측 이 청 구 를 거부 할 지 여 부 를 결정 한다.
        4. 요청 의 취소 와 재 개 를 쉽게 할 수 있 습 니 다.
        5. 새로운 구체 적 인 명령 류 를 추가 하 는 것 은 쉽다.

좋은 웹페이지 즐겨찾기