一、命令模式介绍
1、定义
- 是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令;
- 命令模式属于对象的行为模式,命令模式又称为行动(Action)模式或交易(Transaction)模式;
- 命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。
2、优点
- 降低了系统耦合度;
- 新的命令可以很容易添加到系统中去。
3、缺点
使用命令模式可能会导致某些系统有过多的具体命令类;
二、代码样例
public abstract class AbstractCommand {
protected Barbecurer barbecurer;
public AbstractCommand(Barbecurer barbecurer){
this.barbecurer = barbecurer;
}
public abstract void excuteCommand();
}
public class Command1 extends AbstractCommand {
/**
* @param barbecurer
*/
public Command1(Barbecurer barbecurer) {
super(barbecurer);
}
/* (non-Javadoc)
* @see day_8_command.AbstractCommand#excuteCommand()
*/
@Override
public void excuteCommand() {
System.out.println("开始烤羊肉串");
}
@Override
public String toString() {
return "烤羊肉串";
}
}
public class Waiter {
private List<AbstractCommand> order = new ArrayList<AbstractCommand>();
/**
* 设置订单
* @param command 具体命令,也就是具体烤什么
*/
public void setOrder(AbstractCommand command){
order.add(command);
System.out.println("增加订单:" + command.toString());
}
/**
* 取消订单
* @param command
*/
public void cancelOrder(AbstractCommand command){
order.add(command);
System.out.println("取消订单:" + command.toString());
}
/**
* 通知全部执行
*/
public void notifyX(){
for (AbstractCommand cmd : order){
cmd.excuteCommand();
}
}
}
public class Barbecurer {
public void action(){
System.out.println("开始执行");
}
}
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
Barbecurer boy = new Barbecurer();
Command1 command1 = new Command1(boy);
Waiter waiter = new Waiter();
waiter.setOrder(command1);
waiter.notifyX();
}
}