5
这里是我试图解决的普遍问题:如何在Go中实施策略模式?
- 一组包从一个源收集数据并将其发送到多个通道。
- 第二套软件包正在收集来自多个通道的数据并将其写入一个源。这套软件包需要翻译多种格式的数据。
这似乎是策略模式的完美案例,但我不确定如何在Go中做出最好的工作。
这里是我试图解决的普遍问题:如何在Go中实施策略模式?
这似乎是策略模式的完美案例,但我不确定如何在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()
}
…给你的工作人员。
优秀的答案,谢谢!没有那么多迷失在模式中,因为我知道这是一个以某种方式解决的问题。再次感谢。 – KevDog
但是如何动态加载策略?如果我需要根据站点中的配置加载策略,那么这是如何完成的?从我看到的无法在golang中动态加载包的方式。还是有另一种方式? – Madhan
@Madhan使用switch语句。 – thwd