Golang设计模式——06命令模式

简介: Golang设计模式——06命令模式

命令模式

定义

将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。

优点

  1. 降低系统的耦合度。命令模式能将调用操作的对象与实现该操作的对象解耦。
  2. 增加或删除命令非常方便。采用命令模式增加与删除命令不会影响其他类,它满足“开闭原则”,对扩展比较灵活。
  3. 可以将相关操作抽象成命令,使调用者与实现者相关分离。

缺点

  1. 使用命令模式会导致系统中有过多的具体命令类。因为针对一种命令实现一个命令类。

场景

认为是命令的地方都可以使用命令模式。

代码

package Command
import "fmt"
type Receiver interface {
  Action()
}
type Receiver1 struct {
}
func (r *Receiver1) Action() {
  fmt.Println("执行命令1")
}
type Receiver2 struct {
}
func (r *Receiver2) Action() {
  fmt.Println("执行命令2")
}
type Receiver3 struct {
}
func (r *Receiver3) Action() {
  fmt.Println("执行命令3")
}
type Command interface {
  Execute()
}
type ConcreteCommand1 struct {
  receiver Receiver
}
func (c *ConcreteCommand1) Execute() {
  c.receiver.Action()
}
type ConcreteCommand2 struct {
  receiver Receiver
}
func (c *ConcreteCommand2) Execute() {
  c.receiver.Action()
}
type ConcreteCommand3 struct {
  receiver Receiver
}
func (c *ConcreteCommand3) Execute() {
  c.receiver.Action()
}
type Invoker struct {
  commands []Command
}
func (i *Invoker) SetCommand(command Command) {
  i.commands = append(i.commands, command)
}
func (i *Invoker) ExecuteCommand() {
  for _, c := range i.commands {
    c.Execute()
  }
}
package Command
import "testing"
func TestInvoker_ExecuteCommand(t *testing.T) {
  c1 := ConcreteCommand1{&Receiver1{}}
  c2 := ConcreteCommand1{&Receiver2{}}
  c3 := ConcreteCommand1{&Receiver3{}}
  i := Invoker{}
  i.SetCommand(&c1)
  i.SetCommand(&c2)
  i.SetCommand(&c3)
  i.ExecuteCommand()
}

其他设计模式

设计模式Git源代码

00简单工厂模式

01工厂方法模式

02抽象工厂模式

03外观模式

04建造者模式

05桥接模式

06命令模式

07迭代器模式

08模板模式

09访问者模式

10备忘录模式

11责任链模式

12中介模式

13原型模式

14状态模式

15策略模式

16享元模式

17组合模式

18解释器模式

19单例模式

20适配器模式

21代理模式

22装饰器模式

23观察者模式


目录
相关文章
|
3月前
|
设计模式 Go 开发工具
Golang设计模式——12中介模式
Golang设计模式——12中介模式
26 0
|
19天前
|
设计模式 Java
23种设计模式,命令模式的概念优缺点以及JAVA代码举例
【4月更文挑战第7天】命令模式是一种行为设计模式,它将请求或简单操作封装为一个对象。这种模式允许用户通过调用对象来参数化其他对象的方法,并能保存、排队和执行方法调用。
21 1
|
1月前
|
设计模式 存储 Java
【设计模式】命令模式
【设计模式】命令模式
|
3月前
|
设计模式 Java
设计模式-命令模式
设计模式-命令模式
33 1
|
3月前
|
设计模式 Java
设计模式-命令模式(Command)
设计模式-命令模式(Command)
32 0
|
3月前
|
设计模式 存储 Java
Java设计模式-命令模式
命令(Command)模式是指将请求封装成为一个对象,使发出请求和执行请求的责任分割开,方便将命令对象进行存储、传递、调用、增加与管理。 也就是将发送者、接收者和调用命令封装成独立的对象,来供客户端调用。属于行为模式的一种。
29 1
Java设计模式-命令模式
|
3月前
|
设计模式 消息中间件 Go
Golang设计模式——23观察者模式
Golang设计模式——23观察者模式
23 0
|
3月前
|
设计模式 Go 网络安全
Golang设计模式——21代理模式
Golang设计模式——21代理模式
23 0
|
3月前
|
设计模式 Go 开发工具
Golang设计模式——19单例模式
Golang设计模式——19单例模式
26 0
|
3月前
|
设计模式 Go 开发工具
Golang设计模式——18解释器模式
Golang设计模式——18解释器模式
22 0
Golang设计模式——18解释器模式