1 命令模式
2 概述
3 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。
4
5
6 适用性
7 1.抽象出待执行的动作以参数化某对象。
8
9 2.在不同的时刻指定、排列和执行请求。
10
11 3.支持取消操作。
12
13 4.支持修改日志,这样当系统崩溃时,这些修改可以被重做一遍。
14
15 5.用构建在原语操作上的高层操作构造一个系统。
16
17
18 参与者
19 1.Command
20 声明执行操作的接口。
21
22 2.ConcreteCommand
23 将一个接收者对象绑定于一个动作。
24 调用接收者相应的操作,以实现Execute。
25
26 3.Client
27 创建一个具体命令对象并设定它的接收者。
28
29 4.Invoker
30 要求该命令执行这个请求。
31
32 5.Receiver
33 知道如何实施与执行一个请求相关的操作。任何类都可能作为一个接收者。
1 public class Test {
2
3 public static void main(String[] args) {
4 Receiver rec =
new Receiver();
5 Command cmd =
new CommandImpl(rec);
6 Invoker i =
new Invoker();
7 i.setCommand(cmd);
8 i.execute();
9 }
10 }
1 public class Receiver {
2
3 public void receive() {
4 System.out.println("This is Receive class!"
);
5 }
6 }
1 public abstract class Command {
2 public Command(Receiver receiver) {
3 this.receiver =
receiver;
4 }
5
6 protected Receiver receiver;
7
8 public abstract void execute();
9 }
1 public class CommandImpl
extends Command {
2
3 public CommandImpl(Receiver receiver) {
4 super(receiver);
5 }
6
7 public void execute() {
8 receiver.receive();
9 }
10 }
1 public class Invoker {
2
3 private Command command;
4
5 public void setCommand(Command command) {
6 this.command =
command;
7 }
8
9 public void execute() {
10 command.execute();
11 }
12 }
牛B的代码都在不断的重构,方便系统的扩展。今天又见识了...
转载于:https://www.cnblogs.com/huzi007/p/3885243.html