介绍
命令模式(Command Pattern)属于行为型模式。将请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。是一种数据驱动的设计模式。
优点
- 降低了系统耦合度。
- 新的命令可以很容易添加到系统中去。
缺点
- 使用命令模式可能会导致某些系统有过多的具体命令类
应用
Android中的事件传递机制(handler),实现了命令Message和接收者handler解耦
实现
关键代码:将一个请求封装成一个对象,从而可以用不同的命令来请求该对象
interface Order {
void execute();
}
// 接收者,真正的命令执行对象
class Receiver {
public void eat(){
System.out.println("Start to eat");
}
public void drink(){
System.out.println("Start to drink");
}
}
class eatOrder implements Order {
private Receiver receiver;
public eatOrder(){
this.receiver = new Receiver();
}
public void execute() {
receiver.eat();
}
}
class drinkOrder implements Order {
private Receiver receiver;
public drinkOrder(Receiver receiver){
this.receiver = receiver;
}
public void execute() {
receiver.drink();
}
}
// 关键在于增加了这个Body类,将请求封装成一个对象
class Body {
private Order order;
public Body(Order order){
this.order = order;
}
public void placeOrders(){
order.execute();
}
}
class CommandPatternDemo {
public static void main(String[] args) {
Reciever reciever = new Reciever(); // 创建命令接收者
Order order = new eatOrder(reciever); // 创建命令,并指定接收者
Body body = new Body(order); // 创建命令执行者执行命令
body.placeOrders();
// 无非就是请求方发出请求,接收方接收请求,并执行操作,对象和命令解耦
}
}
Start to eat