命令模式(Command Pattern)

未匹配的标注

命令模式是一种行为型设计模式,它将请求封装为一个对象,从而使不同的请求可以对客户端进行参数化,同时使请求的来源和目标解耦。

在 Go 语言中,可以使用接口和结构体来实现命令模式。

首先,定义一个命令接口:

type Command interface {
    Execute()
}

接口中只有一个方法 Execute(),该方法用于执行命令。接着,定义一个命令结构体:

type ConcreteCommand struct {
    receiver Receiver
}

func (c *ConcreteCommand) Execute() {
    c.receiver.Action()
}

结构体中包含一个接收者( Receiver )对象,并实现了 Execute() 方法。在 Execute() 方法中,执行接收者对象的 Action() 方法。

接着,定义一个接收者结构体:

type Receiver struct{}

func (r *Receiver) Action() {
    fmt.Println("Receiver.Action executed.")
}

接收者结构体中只有一个方法 Action(),用于执行接收者对象的具体操作。

最后,定义一个请求者(Invoker)结构体:

type Invoker struct {
    command Command
}

func (i *Invoker) SetCommand(c Command) {
    i.command = c
}

func (i *Invoker) ExecuteCommand() {
    i.command.Execute()
}

请求者结构体包含一个命令对象,并提供 SetCommand() 方法用于设置命令对象,以及 ExecuteCommand() 方法用于执行命令对象。

下面是一个完整的示例代码,其中包括了命令接口、命令结构体、接收者结构体和请求者结构体的实现:

package main

import "fmt"

// Command 接口
type Command interface {
    Execute()
}

// ConcreteCommand 结构体
type ConcreteCommand struct {
    receiver Receiver
}

func (c *ConcreteCommand) Execute() {
    c.receiver.Action()
}

// Receiver 结构体
type Receiver struct{}

func (r *Receiver) Action() {
    fmt.Println("Receiver.Action executed.")
}

// Invoker 结构体
type Invoker struct {
    command Command
}

func (i *Invoker) SetCommand(c Command) {
    i.command = c
}

func (i *Invoker) ExecuteCommand() {
    i.command.Execute()
}

func main() {
    receiver := &Receiver{}
    command := &ConcreteCommand{*receiver}
    invoker := &Invoker{}
    invoker.SetCommand(command)
    invoker.ExecuteCommand()
}

在这个示例代码中,首先创建了一个接收者对象 receiver,然后创建了一个命令对象 command,并将接收者对象 receiver 传递给命令对象 command 的构造函数。接着创建了一个请求者对象 invoker,并将命令对象 command 设置为请求者对象 invoker 的命令对象。最后,执行请求者对象 invokerExecuteCommand() 方法,该方法会执行命令对象 commandExecute() 方法,从而执行接收者对象 receiverAction() 方法,输出 "Receiver.Action executed."

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~