命令模式
命令模式是一种行为型设计模式,它将请求封装成一个对象,从而允许我们将请求的发送者和接收者解耦。在命令模式中,有以下几个关键角色:
1. 命令接口(Command):定义了执行命令的方法,通常包含一个execute()方法。
2. 具体命令类(ConcreteCommand):实现了命令接口,封装了具体的操作和接收者。
3. 接收者类(Receiver):实际执行命令的对象。
4. 调用者类(Invoker):接收命令并触发执行的对象。
5. 客户端类(Client):创建命令对象和调用者对象,并将它们组织起来。
下面是一个使用命令模式的示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
package main
import "fmt"
// 命令接口
type Command interface {
Execute()
}
// 具体命令类
type ConcreteCommand struct {
receiver *Receiver
}
func (c *ConcreteCommand) Execute() {
c.receiver.Action()
}
// 接收者类
type Receiver struct{}
func (r *Receiver) Action() {
fmt.Println("执行具体操作")
}
// 调用者类
type Invoker struct {
command Command
}
func (i *Invoker) SetCommand(command Command) {
i.command = command
}
func (i *Invoker) ExecuteCommand() {
i.command.Execute()
}
// 客户端代码
func main() {
receiver := &Receiver{}
command := &ConcreteCommand{receiver: receiver}
invoker := &Invoker{}
invoker.SetCommand(command)
invoker.ExecuteCommand()
}
|
在这个示例中,我们定义了命令接口(Command),具体命令类(ConcreteCommand),接收者类(Receiver)和调用者类(Invoker)。接收者类定义了具体的操作,而具体命令类封装了接收者对象,并实现了命令接口。调用者类接收命令并触发执行。
在主函数中,我们创建了一个接收者对象、一个具体命令对象和一个调用者对象。然后,我们将具体命令对象设置给调用者对象,并通过调用者对象执行命令。
当运行这个程序时,它将输出"执行具体操作",表示成功执行了具体的操作。
希望这个示例能够帮助您理解如何在Go语言中实现命令模式。如果您有任何问题,请随时提问。