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观察者模式


目录
相关文章
|
4月前
|
设计模式 存储 算法
Java设计模式-命令模式(16)
Java设计模式-命令模式(16)
|
5月前
|
设计模式 存储 Java
【十二】设计模式~~~行为型模式~~~命令模式(Java)
文章详细介绍了命令模式(Command Pattern),这是一种对象行为型模式,用于将请求封装成对象,实现请求发送者与接收者的解耦,从而降低系统耦合度、提高灵活性,并支持命令的排队、记录、撤销和恢复操作。通过案例分析、结构图、时序图和代码示例,文章展示了命令模式的组成部分、实现方式和应用场景,并讨论了其优点、缺点和适用情况。
|
6月前
|
设计模式 JavaScript API
js设计模式【详解】—— 命令模式
js设计模式【详解】—— 命令模式
62 6
|
7月前
|
设计模式
命令模式-大话设计模式
命令模式-大话设计模式
|
7月前
|
设计模式 Java uml
必知的技术知识:JAVA【设计模式】命令模式
必知的技术知识:JAVA【设计模式】命令模式
34 0
|
7月前
|
设计模式 Java
Java设计模式之命令模式详解
Java设计模式之命令模式详解
|
7月前
|
设计模式
设计模式之命令模式
设计模式之命令模式
|
8月前
|
设计模式 Java 调度
【设计模式系列笔记】命令模式
命令模式是一种行为设计模式,它将请求封装成一个对象,从而允许使用不同的请求、队列或日志请求参数化客户端对象,同时支持撤销操作。
79 1
|
8月前
|
设计模式 Java 调度
小谈设计模式(24)—命令模式
小谈设计模式(24)—命令模式
|
8月前
|
设计模式 存储 Java
【搞懂设计模式】命令模式:从遥控器到编程的妙用!
【搞懂设计模式】命令模式:从遥控器到编程的妙用!
82 0

热门文章

最新文章