读书人

下令模式(Command)

发布时间: 2012-10-24 14:15:58 作者: rapoo

命令模式(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 stubreceiver.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 stubreceiver.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 stubreceiver.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 stubCookerReceiver 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();}}

?

读书人网 >软件架构设计

热点推荐