设计模式—命令模式
定义
将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能
代码
接受者,命令执行
1 2 3
| public abstract class Receiver { public abstract void doSomething(); }
|
1 2 3 4 5 6
| public class ConcreteReceiver1 extends Receiver { @Override public void doSomething() { System.out.println("receiver1"); } }
|
1 2 3 4 5 6
| public class ConcreteReceiver2 extends Receiver { @Override public void doSomething() { System.out.println("receiver2"); } }
|
命令者
1 2 3
| public abstract class Command { public abstract void execute(); }
|
1 2 3 4 5 6 7 8 9 10 11 12 13
| public class ConcreteCommand1 extends Command {
private Receiver receiver;
public ConcreteCommand1(Receiver receiver) { this.receiver = receiver; }
@Override public void execute() { this.receiver.doSomething(); } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13
| public class ConcreteCommand2 extends Command {
private Receiver receiver;
public ConcreteCommand2(Receiver receiver) { this.receiver = receiver; }
@Override public void execute() { this.receiver.doSomething(); } }
|
调用者
1 2 3 4 5 6 7 8 9 10 11 12
| public class Invoke { private Command command;
public void setCommand(Command command) { this.command = command; }
public void action(){ this.command.execute(); }
}
|
测试:
1 2 3 4 5 6 7 8 9 10 11 12
| public class InvokeTest {
@Test public void testInvoke(){ Invoke invoke = new Invoke(); Receiver receiver = new ConcreteReceiver1(); Command command = new ConcreteCommand1(receiver); invoke.setCommand(command); invoke.action(); }
}
|