命令模式:
将请求封装成对象,这可以让你使用不同的请求、队列、或者日志请求来参数化其他对象。命令模式也可以支持撤销操作。
命令模式的结构:
命令模式有4个部分:
- 命令接口/抽象类:声明了一个给所有具体命令类的抽象接口。
- 具体命令类:实现命令接口/抽象类,负责调用接收者的相应操作。
- 请求者类:负责调用命令对象执行请求。
- 接收者类:负责接收一个请求,并具体实施和执行一个请求。
示例代码如下:
命令接口:命令接口只有一个抽象方法,就是执行方法。
public interface Command { void execute();}
具体命令类:具体命令类需要持有一个接收者对象的句柄,以通知接收者执行相应动作。
public class ConCommand implements Command { //持有相应的接收者对象 private Receiver receiver; public ConCommand(Receiver receiver){ this.receiver = receiver; } //实现接口中的方法 public void execute() { //通常会转调接收者对象的相应方法,让接收者来真正执行功能 receiver.action(); }}
请求者类:请求者类需要持有命令对象,方便让命令对象通知执行者执行相关动作。
public class Invoker { //要持有命令对象 private Command command = null; public Invoker(Command command){ this.command = command; } //此方法通知命令对象,让命令对象通知接收者执行相应操作 public void action(){ command.execute(); }}
执行者类:
public class Receiver { //真正要执行的动作 public void action(){ System.out.println("执行操作"); }}
最后,来看一下命令模式是如何工作的:
public class Client { public static void main(String[] args) { //创建接收者 Receiver receiver = new Receiver(); //创建命令对象,设定它的接收者 Command command = new ConCommand(receiver); //创建请求者,把命令对象设置进去 Invoker invoker = new Invoker(command); //执行方法 invoker.action(); }}