【发布时间】:2020-07-25 14:19:59
【问题描述】:
我想为以下接口提供多种实现:
type API interface {
A()
B()
C()
}
根据我的用例,所有实现应该为函数 A 和 B 共享完全相同的逻辑,而函数 C 将有不同的逻辑用于不同的实现。
所以我创建了以下要嵌入的通用实现:
type Common struct {}
func (c *Common) A() {}
func (c *Common) B() {}
要为上面的接口创建两个实现,我可以执行以下操作:
type FirstImpl struct { Common }
func (i *FirstImpl) C() {}
type SecondImpl struct { Common }
func (i *SecondImpl) C() {}
一切正常,直到我发现函数 C 需要在函数 B 中调用。请注意,函数 B 的逻辑在两个实现中应该仍然相同,尽管我们可能会在 B 中调用 C 得到不同的结果。。 p>
我想知道这是否是 Go 中的一种常见模式,是否有一种优雅的方式来处理它。
【问题讨论】:
-
play.golang.com/p/8EtJWUmtryN 这是一种方式,但我不会称之为优雅。
-
@mkopriva 谢谢!这非常接近我想要的。理想情况下,我想像 &FirstImpl{} 一样简单地实例化对象,而不需要为每个实现重复 impl.Common.c = impl。
标签: oop go design-patterns interface