mirror of
https://github.com/CyC2018/Interview-Notebook.git
synced 2026-11-01 11:43:46 +00:00
Update 设计模式 - 命令.md
补充实现代码的执行输出及命令对象化特性的说明,并对意图、类图等小节进行文字校对。
This commit is contained in:
+17
-10
@@ -1,18 +1,18 @@
|
||||
## 2. 命令(Command)
|
||||
|
||||
### 意图
|
||||
将命令封装成对象中,具有以下作用:
|
||||
将命令封装成对象,具有以下作用:
|
||||
|
||||
- 使用命令来参数化其它对象
|
||||
- 将命令放入队列中进行排队
|
||||
- 将命令的操作记录到日志中
|
||||
- 支持可撤销的操作
|
||||
- 使用命令来参数化其它对象;
|
||||
- 将命令放入队列中进行排队;
|
||||
- 将命令的操作记录到日志中;
|
||||
- 支持可撤销的操作。
|
||||
|
||||
### 类图
|
||||
- Command:命令
|
||||
- Receiver:命令接收者,也就是命令真正的执行者
|
||||
- Invoker:通过它来调用命令
|
||||
- Client:可以设置命令与命令的接收者
|
||||
- Command:命令;
|
||||
- Receiver:命令接收者,也就是命令真正的执行者;
|
||||
- Invoker:通过它来调用命令;
|
||||
- Client:可以设置命令与命令的接收者。
|
||||
|
||||
<div align="center"> <img src="pics/dp-command.png" width="760px"/> </div><br>
|
||||
|
||||
@@ -117,6 +117,13 @@ public class Client {
|
||||
}
|
||||
```
|
||||
|
||||
```text
|
||||
Light is on!
|
||||
Light is off!
|
||||
```
|
||||
|
||||
请求变成对象以后,就可以像数据一样保存和传递:把执行过的命令压入栈,给 Command 加一个 undo() 方法恢复执行前的状态,就能实现撤销;把命令放进队列,交给线程池执行,就是 Runnable 的用法。
|
||||
|
||||
### JDK 中的应用
|
||||
- [java.lang.Runnable](http://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html)
|
||||
- [Netflix Hystrix](https://github.com/Netflix/Hystrix/wiki)(开源库,不属于 JDK)
|
||||
@@ -125,4 +132,4 @@ public class Client {
|
||||
## 参考资料
|
||||
|
||||
- 弗里曼. Head First 设计模式 [M]. 中国电力出版社, 2007.
|
||||
- Gamma E. 设计模式: 可复用面向对象软件的基础 [M]. 机械工业出版社, 2007.
|
||||
- Gamma E. 设计模式:可复用面向对象软件的基础 [M]. 机械工业出版社, 2007.
|
||||
|
||||
Reference in New Issue
Block a user