用途
命令模式 (Command) 将一个请求 封装为一个对象,从而使你可以用 不同的请求对客户进行 参数化; 对请求排队或请求日志,以及支持可撤销的操作。
命令模式是一种行为型模式。
结构图-命令模式结构图
Command : 用来声明执行操作的接口。 abstract class Command { protected Receiver receiver; public Command(Receiver receiver) { this.receiver = receiver; } public abstract void Execute(); }ConcreteCommand : 将一个接收者对象绑定一个动作,调用接收者相应的操作,以实现Execute。
class ConcreteCommand extends Command { public ConcreteCommand(Receiver receiver) { super(receiver); } @Override public void Execute() { receiver.Action(); } }Invoker : 要求该命令执行这个请求。
class Invoker { private Command command; public Invoker(Command command) { this.command = command; } public void ExecuteCommand() { command.Execute(); } }Receiver : 知道如何实施与执行一个与请求相关的操作,任何类都可能作为一个接收者。
class Receiver { public void Action() { System.out.println("执行请求"); } }Client : 创建一个具体命令对象并设定它的接受者。
public class CommandPattern { public static void main(String[] args) { Receiver receiver = new Receiver(); Command cmd = new ConcreteCommand(receiver); Invoker invoker = new Invoker(cmd); invoker.ExecuteCommand(); } }交互
图-命令模式交互图
1、Client 创建一个 ConcreteCommand 对象并指定他的 Receiver 对象。 2、某个 Invoker 对象存储该 ConcreteCommand 对象。 3、该 Invoker 通过调用 Command 对象的 Execute 操作来提交一个请求。若该命令是可撤销的,ConcreteCommand 就在执行 Execute 操作之前存储当前状态以用于取消该命令。 4、ConcreteCommand 对象对调用它的 Receiver 的一些操作以执行该请求。要点
推荐
本文属于 JAVA设计模式系列 。
参考资料
《大话设计模式》
《HeadFirst设计模式》