1.定义#
将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。将请求与与请求处理者解耦合。命令模式主要有三个部分接收命令的部分Invoke,具体的命令对象ConcreteCommand,命令的处理者Receiver。
2.类图#
类图
3.实现#
3.1抽象接收者类##
public interface Receiver {
public void doSomething();
}
3.2具体接收者类##
public class ConcreteReceiver1 implements Receiver{
@Override
public void doSomething() {
System.out.println("执行操作1");
}
}
public class ConcreteReceiver2 implements Receiver{
@Override
public void doSomething() {
System.out.println("执行操作2”);
}
}
3.3抽象命令类##
public abstract class Command {
protected ConcreteReceiver1 concreteReceiver1 = new ConcreteReceiver1();
protected ConcreteReceiver2 concreteReceiver2 = new ConcreteReceiver2();
public abstract void execute();
}
3.4具体命令类##
public class ConcreteCommand1 extends Command {
@Override
public void execute() {
super.concreteReceiver1.doSomething();
}
}
public class ConcreteCommand2 extends Command {
@Override
public void execute() {
super.concreteReceiver2.doSomething();
}
}
3.5中间者类##
public class Invoke {
private Command command = null;
public Invoke() {
}
public Invoke(Command _command) {
this.command = _command;
}
public void setCommand(Command _command) {
this.command = _command;
}
public void action() {
this.command.execute();
}
}
3.6客户端类##
public class Client {
public static void main(String args[]) {
Command command1 = new ConcreteCommand1();
Invoke invoke = new Invoke(command1);
invoke.action();
Command command2 = new ConcreteCommand2();
invoke.setCommand(command2);
invoke.action();
}
}