设计模式—命令模式

定义

将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能

代码

接受者,命令执行

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();
}

}