如何在Go中实现策略模式?

问题描述 投票:8回答:2

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

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

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

design-patterns go strategy-pattern
2个回答
19
投票

一般而言;不要迷失在构建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()
}

…对您的工人。


0
投票

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

实现工厂。
© www.soinside.com 2019 - 2024. All rights reserved.