如何在Go中实施战略模式?

Kev*_*Dog 8 design-patterns strategy-pattern go

这是我要解决的一般问题:

  1. 一组软件包从一个源收集数据并将其发送到多个通道.
  2. 第二组软件包从许多渠道收集数据并将其写入一个来源.这组包需要从多种格式转换数据.

这似乎是战略模式的完美案例,但我不确定如何最好地在Go中完成这项工作.

thw*_*hwd 19

一般来说; 不要迷失在构建Go应用程序的模式和协议中.这种语言使表达和直接变得容易.大多数时候定义可靠的接口使得一切都足够灵活.

不过,这里是Go中策略模式的一个例子:

定义策略行为的界面:

type PackageHandlingStrategy interface {
    DoThis()
    DoThat()
}
Run Code Online (Sandbox Code Playgroud)

实施该战略:

type SomePackageHandlingStrategy struct {
    // ...
}

func (s *SomePackageHandlingStrategy) DoThis() {
    // ...
}

func (s *SomePackageHandlingStrategy) DoThat() {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

然后,要么嵌入......

type PackageWorker struct {
    SomePackageHandlingStrategy
}

func (w *PackageWorker) Work() {
    w.DoThis()
    w.DoThat()
}
Run Code Online (Sandbox Code Playgroud)

......或者通过战略......

type PackageWorker struct {}

func (w *PackageWorker) Work(s PackageHandlingStrategy) {
    s.DoThis()
    s.DoThat()
}
Run Code Online (Sandbox Code Playgroud)

......给你的工人

  • @Madhan使用switch语句。 (2认同)