定义
命令模式是将「请求」封装成对象,尝试以对象来代表实际行动。命令对象可以把行动及其参数封装起来,使这些行动可以被:重复多次、取消、取消后又再重做。
使用
命令模式通常由command
、receiver
、invoker
、client
组成。
invoker
命令调用者持有一个command
命令对象,并在特定时刻触发命令对象的execute()
方法,指令请求的命令。
receiver
命令接收者知道如何进行具体的执行操作(action()
方法)。
具体的command
命令对象定义了具体动作和接收者之间的绑定关系,它持有一个receiver
命令接收者对象,当invoker
调用了command
的execute()
方法时,其调用receiver
的action()
方法来执行具体动作。
client
对象负责创建具体的command
对象,并设置其receiver
对象。
代码(Java)
// 命令接口 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(); } } // 调用者 public class Invoker { Command command; public Invoker(Command command) { this.command = command; } public void invoker() { command.execute(); } } // 命令接受者 public class Receiver { public void action() { System.out.println("Receiver start action"); } } // Client 测试类 public class Client { public static void main(String[] args) { Receiver receiver = new Receiver(); Command command = new ConcreteCommand(receiver); Invoker invoker = new Invoker(command); invoker.invoker(); } }
总结
命令模式可以让命令的请求者和接收者之间解耦,在被解耦的两者之间是通过添加一个中间层--命令对象进行沟通的。