`
wgq837051
  • 浏览: 86142 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

命令模式(Command)

阅读更多

     命令模式是一种对象行为型模式,它主要解决的问题:在软件构建过程中,行为发起者与行为实现者之间的紧耦全的问题。它将一个发起者请求封装成一个对象,对请求排队或记录请求日志,以及支持可撤销的操作,将发起者和执行者分开来,通过命令的方式来实现。

     命令模式包含了了3类对象。

    1. 请求发起者Invoker:调用命令对象执行这个请求

    2. 请求执行者Receiver:知道如何实施与执行一个请求相关的操作,任何类都可能作为一个接收者。

    3. 命令MyCommand: 先声明执行操作的接口Command,并可以根据该接口有多个实现,如MyCommand,在实现类中将一个接收者对象绑定于一个动作;调用接收者相应的操作,以实现命令角色声明的执行操作的接口。

 

 

 

package command;
/**
 * 命令接口
 * @author lenovo
 *
 */
public interface Command {
	public void execute();
}

 

package command;

/**
 * 点菜命令
 * @author lenovo
 *
 */
public class OrderCaiCommand implements Command {

	private CookerReceiver receiver;
	public OrderCaiCommand(CookerReceiver receiver){
		this.receiver = receiver;
	}
	public void execute() {
		// TODO Auto-generated method stub
		receiver.shaocai();
	}

}

  

package command;
/**
 * 需要米饭命令
 * @author lenovo
 *
 */
public class OrderFanCommand implements Command {

	private CookerReceiver receiver;
	
	public OrderFanCommand(CookerReceiver receiver){
		this.receiver = receiver;
	}
	public void execute() {
		// TODO Auto-generated method stub
		receiver.jufan();
	}

}

 

package command;
/**
 * 需要汤命令
 * @author lenovo
 *
 */
public class OrderTangCommand implements Command {
	private CookerReceiver receiver;
	public OrderTangCommand(CookerReceiver receiver){
		this.receiver = receiver;
	}
	public void execute() {
		// TODO Auto-generated method stub
		receiver.hetang();
	}

}

 

package command;

import java.util.ArrayList;
import java.util.List;
/**
 *服务员记录下这些命令,通知厨师
 * @author lenovo
 *
 */
public class Waiter {
	List<Command> listCommand = new ArrayList<Command>();
	public void addOrder(Command command){
		listCommand.add(command);
	}
	public void cancelOrder(Command command){
		listCommand.remove(command);
	}
	public void notifyCooker(){
		for(int i=0;i<listCommand.size();i++){
			Command command = listCommand.get(i);
			command.execute();
		}
	}
}

 

package command;

public class customTest {

	/**
	 * 客户叫菜,叫汤,叫米饭,服务员通知厨师开始做
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		CookerReceiver receiver = new CookerReceiver();
		Command command1 =  new OrderCaiCommand(receiver);
		Command command2 = new OrderFanCommand(receiver);
		Command command3 = new OrderTangCommand(receiver);
		Waiter waiter = new Waiter();
		waiter.addOrder(command1);
		waiter.addOrder(command2);
		waiter.addOrder(command3);
		waiter.notifyCooker();
		waiter.cancelOrder(command2);//取消做饭命令
		waiter.notifyCooker();
	}

}

 

  • 大小: 14.4 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics