命令模式
定义:把一个请求或者操作封装到一个对象中。命令模式把发送命令的责任和执行命令的责任分割开,委派给不同的对象。
优点:命令模式把请求一个操作的对象与知道怎么执行一个操作的对象分隔开,从而使新的命令类可以很容易被加入到系统当中。
缺点:命令类较多时不便于管理。
使用时机:当需要先将一个函数登记上,然后再以后调用此函数时,就需要使用命令模式,其实这就是回调函数。
小巩在饭店吃饭,看到点菜单把顾客要点的菜告诉给厨师,厨师根据菜单来做菜。
这种情形类似命令模式。
先设计厨师类:
public class Chef {
public void cook() {
System.out.println("厨师开始做菜");
}
}
然后设计命令接口和命令类
public interface Command1 {
void execute();
}
public class CookCommand implements Command1 {
private Chef chef;
public CookCommand(Chef chef) {
this.chef = chef;
}
public void execute() {
chef.cook();
}
}
实现顾客类,顾客联系的是命令类。目的是间接调用厨师类
import java.util.List;
import java.util.ArrayList;
public class Consumer {
private List list = new ArrayList();
public void orderDishes() {
for (int i = 0; i < list.size(); i++) {
Command command = (Command)list.get(i);
command.execute();
}
}
public void addCommand(Command1 command) {
list.add(command);
}
}
客户端调用的时候,厨师注入命令类,命令类注入到顾客类
public class Client {
public static void main(String[] argv) {
Chef chef=new Chef();
Command command=new CookCommand(chef);
Consumer cosumer=new Consumer();
cosumer.addCommand(command);
cosumer.orderDishes();
}
}