251108 thinking command
1. 什么是命令模式
命令模式是一种行为设计模式,它将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化。简单来说,就是将请求的发送者和请求的具体操作完全解耦。
2. 为什么需要命令模式?
命令模式的核心价值在于解耦。如果没有命令模式,调用者(比如一个按钮 Button)需要直接引用并调用一个具体的操作(比如一个文档 Document 的 save() 方法)。这会导致 Button 和 Document 紧密耦合,Button 无法被复用到其他操作上。
通过引入命令对象,调用者不再关心命令的接收者是谁,也不关心操作如何执行。它只知道“我需要执行这个命令”。
这样的话,调用者和接收者之间没有任何直接引用,各自可以独立变化。而且添加新的命令非常容易,只需创建新的具体命令类,而无需修改现有代码,符合开放/封闭原则。
3. 命令模式的实现 (Go)
中间件:
1 | // Command 接口定义了一个执行操作的方法 |
客户端
1 | receiver := &Receiver{} |
类图:
classDiagram
class Invoker {
-command: *Command
+SetCommand(command: *Command)
+ExecuteCommand(receiver: *Receiver)
}
class Command {
<<interface>>
+Execute(receiver: *Receiver)
}
class Command1 {
+Execute(receiver: *Receiver)
}
class Receiver {
//...
+Action()
}
Invoker "*" o--> "*" Command: holds
Command1 ..> Receiver: executes
Command1 ..|> Command : implements
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Elian's blog page!