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
【设计模式】【行为型模式】命令模式(Command)
一、入门 什么是命令模式? 命令模式是一种行为设计模式,它将请求或操作封装为对象,从而使你可以用不同的请求对客户进行参数化,并支持请求的排队、记录、撤销等操作。 命令模式的核心是将“请求”封装为独立的
163 15
|
7月前
|
设计模式 存储 算法
「全网最细 + 实战源码案例」设计模式——命令模式
命令模式(Command Pattern)是一种行为型设计模式,将请求封装成独立对象,从而解耦请求方与接收方。其核心结构包括:Command(命令接口)、ConcreteCommand(具体命令)、Receiver(接收者)和Invoker(调用者)。通过这种方式,命令的执行、撤销、排队等操作更易扩展和灵活。 适用场景: 1. 参数化对象以操作。 2. 操作放入队列或远程执行。 3. 实现回滚功能。 4. 解耦调用者与接收者。 优点: - 遵循单一职责和开闭原则。 - 支持命令组合和延迟执行。 - 可实现撤销、恢复功能。 缺点: - 增加复杂性和类数量。
207 14
「全网最细 + 实战源码案例」设计模式——命令模式
|
12月前
|
设计模式 存储 算法
Java设计模式-命令模式(16)
Java设计模式-命令模式(16)
150 2
|
设计模式 存储 Java
【十二】设计模式~~~行为型模式~~~命令模式(Java)
文章详细介绍了命令模式(Command Pattern),这是一种对象行为型模式,用于将请求封装成对象,实现请求发送者与接收者的解耦,从而降低系统耦合度、提高灵活性,并支持命令的排队、记录、撤销和恢复操作。通过案例分析、结构图、时序图和代码示例,文章展示了命令模式的组成部分、实现方式和应用场景,并讨论了其优点、缺点和适用情况。
|
设计模式 JavaScript API
js设计模式【详解】—— 命令模式
js设计模式【详解】—— 命令模式
146 6
|
设计模式
命令模式-大话设计模式
命令模式-大话设计模式
|
设计模式 Java uml
必知的技术知识:JAVA【设计模式】命令模式
必知的技术知识:JAVA【设计模式】命令模式
70 0
|
设计模式 Java
Java设计模式之命令模式详解
Java设计模式之命令模式详解
|
设计模式
设计模式之命令模式
设计模式之命令模式
|
设计模式 Java 调度
【设计模式系列笔记】命令模式
命令模式是一种行为设计模式,它将请求封装成一个对象,从而允许使用不同的请求、队列或日志请求参数化客户端对象,同时支持撤销操作。
137 1