命令模式(Command Pattern)是一种行为设计模式,它将一个请求封装成一个对象,从而让开发者可以使用不同的请求对客户进行参数化、对请求排队或记录日志。命令模式也支持可撤销的操作。
命令模式通常涉及以下几个要素:
以下是使用Go语言实现命令模式的示例:
package main
import "fmt"
// 命令接口
type Command interface {
Execute()
}
// 接收者
type Receiver struct{}
func (r *Receiver) Action() {
fmt.Println("Receiver Action")
}
// 具体命令
type ConcreteCommand struct {
receiver *Receiver
}
func NewConcreteCommand(receiver *Receiver) *ConcreteCommand {
return &ConcreteCommand{receiver: receiver}
}
func (c *ConcreteCommand) Execute() {
c.receiver.Action()
}
// 请求者
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 := NewConcreteCommand(receiver)
invoker := &Invoker{}
invoker.SetCommand(command)
invoker.ExecuteCommand()
}
命令模式适用于以下场景:
优点:
缺点:
命令模式是一种灵活的设计模式,提供了对命令的封装和解耦,让系统更加灵活和可扩展。