命令模式(Command)属于对象的行为模式。
命令模式又称为行动模式(Action)或交易模式(Transaction)。
命令模式把一个请求或者操作封装到一个对象中。
命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。
命令模式是对命令的封装。命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象。
命令模式涉及五个角色:
源代码:
客户端角色
public class Client {
public static void main(String[] args) {
Receiver receiver = new Receiver();
Command command = new ConcreteCommand(receiver);
Invoker invoker = new Invoker(command);
invoker.action();
}
}
请求者(Invoker)
public class Invoker {
private Command command;
//构造函数
public Invoker(Command command){
this.command = command;
}
//行动方法
public void action(){
command.execute();
}
}
接收者(Receiver)
public class Receiver {
//构造函数
public Receiver(){
//write code here
}
//行动方法
public void action(){
System.out.println("Action has been taken.");
}
}
抽象命令角色
public interface Command {
//执行方法
void execute();
}
具体命令类
public class ConcreteCommand implements Command {
private Receiver receiver;
public ConcreteCommand(Receiver receiver){
this.receiver = receiver;
}
@Override
public void execute() {
receiver.action();
}
}
命令模式的活动序列
命令模式的活动序列:
1. 客户端创建了一个ConcreteCommand对象,并指明了接收者。
2. 请求者对象保存了ConcreteCommand对象
3. 请求者对象通过调用action方法发出请求。如果命令时能撤销的,那么ConcreteCommand保存了调用execute()方法之前的状态。
4. ConcreteCommand对象调用接收的一方的方法执行请求。
优点:
缺点: