应用:线程池、日程安排(Scheduler)、工作队列。
解耦,通过命令来解耦请求者和执行者, 请求者 ->命令 -> 执行者
实现:请求者执行命令,调用命令的execute()方法,命令继承封装执行者,调用执行者的具体方法。
命令的撤销
宏命令:一个命令执行多个命令
队列请求:日程安排、线程池、工作队列
命令模式将发出请求的对象和执行请求的对象解耦。
在被解耦的两者之间是通过命令对象进行沟通的,命令对象封装了接收者和一个活一组动作。
调用这通过调用命令对象execute()发出请求,这会使得接受者的动作被调用。
调用者可以接受命令当作参数,甚至在运行时动态的执行。
命令可以支持撤销,做法是实现一个undo()方法来回到execute()被执行前的状态。
宏命令是命令的一种简单的延申,允许调用多个命令。宏方法也支持撤销。
实际操作时,很常见使用“聪明”命令对象,也就是直接实现了请求,而不是将工作委托给接收者。
命令也可以用来实现日志和事务系统。
public interface Command{
public void execute();
}
public class ConcreteCommand{
RealPerformer realPerformer;
public ConcreteCommand(RealPerformer realPerformer){
this.realPerformer = realPerformer;
}
public void execute(){
realPerformer.doAction();
}
}
public class Requester{
Command command;
public Requester(ConcreteCommand command){
this.command= command;
}
public void request(){
command.execute();
}
}