9

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

  1. 一组包从一个来源收集数据并将其发送到多个渠道。
  2. 第二组包是从许多渠道收集数据并将其写入一个源。这组包需要翻译多种格式的数据。

这似乎是策略模式的完美案例,但不确定如何最好地在 Go 中实现这一点。

4

2 回答 2

21

一般来说; 不要迷失在构建 Go 应用程序的模式和协议中。该语言使其易于表达和直截了当。大多数时候,定义可靠的接口会使一切都足够灵活。

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

为策略的行为定义一个接口:

type PackageHandlingStrategy interface {
    DoThis()
    DoThat()
}

实施该策略:

type SomePackageHandlingStrategy struct {
    // ...
}

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

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

然后,要么嵌入…

type PackageWorker struct {
    SomePackageHandlingStrategy
}

func (w *PackageWorker) Work() {
    w.DoThis()
    w.DoThat()
}

……或者通过策略……

type PackageWorker struct {}

func (w *PackageWorker) Work(s PackageHandlingStrategy) {
    s.DoThis()
    s.DoThat()
}

……给你的工人。

于 2013-07-22T14:52:15.597 回答
1

@madhan您可以制作策略工厂。然后从配置中传递策略名称,工厂将创建您需要的策略实例。工厂可以用 switch 或 map[string]Strateger 来实现。

于 2019-10-31T18:19:24.610 回答