【发布时间】:2022-01-02 17:23:26
【问题描述】:
我是 OOP 人,最近我必须在 Golang 上工作,这是我以前没有做过的语言。虽然我已经阅读了很多关于组合的文章,但我注意到在 Golang 上正确使用它有点棘手
假设我有两个 Golang 组合的例子,我不知道哪个是正确的,它们之间会有所不同吗?谢谢
第一个例子
type BaseClass struct {
db *DB
}
func NewBaseClass(db *DB) *BaseClass {
return &BaseClass{db}
}
type ChildrenClass1 struct {
baseClass *BaseClass
}
func NewChildrenClass1(db *DB) *ChildrenClass1 {
baseClass := NewBaseClass(db)
return &ChildrenClass1{baseClass}
}
type ChildrenClass2 struct {
baseClass *BaseClass
}
func NewChildrenClass2(db *DB) *ChildrenClass2 {
baseClass := NewBaseClass(db)
return &ChildrenClass2{baseClass}
}
func main(){
db := NewDB()
chilrend1 := NewChildrenClass1(db)
chilrend2 := NewChildrenClass2(db)
}
第二个例子
type BaseClass struct {
db *DB
}
func NewBaseClass(db *DB) *BaseClass {
return &BaseClass{db}
}
type ChildrenClass1 struct {
baseClass *BaseClass
}
func NewChildrenClass1(baseClass *BaseClass) *ChildrenClass1 {
return &ChildrenClass1{baseClass}
}
type ChildrenClass2 struct {
baseClass *BaseClass
}
func NewChildrenClass2(baseClass *BaseClass) *ChildrenClass2 {
return &ChildrenClass2{baseClass}
}
func main(){
db := NewDB()
baseClass := NewBaseClass(db)
chilrend1 := NewChildrenClass1(baseClass)
chilrend2 := NewChildrenClass2(baseClass)
}
【问题讨论】:
-
您尝试对 Go 中绝对不可能的继承建模。不管你怎么努力。不管你多么聪明。无论你多么喜欢作曲。现在和永远忘记 Go 中的 Base 和 Child 的东西,它不起作用。
-
任何时候你称任何东西为“基础”、“子”或“类”,你的开端就很糟糕。 Go 中不存在这些概念,并且组合没有层次结构,因此任何正确使用组合都不会有“基”或“子”。这些概念仅存在于继承模型中。
-
嘿,有人在这里问了同样的问题:stackoverflow.com/questions/61073683/… -- 这个答案对你有帮助吗?
标签: go inheritance design-patterns composition