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

时间:2013-07-22 14:00:44

标签: design-patterns go strategy-pattern

以下是我要解决的一般问题:

  1. 一组软件包从一个来源收集数据并将其发送到多个渠道。
  2. 第二组软件包从多个渠道收集数据并将其写入一个来源。这组软件包需要翻译多种格式的数据。
  3. 这似乎是战略模式的完美案例,但我不确定如何最好地在Go中完成这项工作。

2 个答案:

答案 0 :(得分:18)

总的来说;不要迷失在构建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()
}

...给你的工人。

答案 1 :(得分:0)

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

相关问题