1.前提知识
一个结构体想要使用另一个结构体的字段,绑定的函数等,那么可以有两种写法:
a. 嵌套继承【也就是匿名字段】 b.组合【也就是非匿名字段】
type person struct {}
type student struct {
person //嵌套继承
}
type worker struct {
//p person//值组合
p *person //指针组合
}
2.接口隔离原则
接口隔离原则 就是尽量使用【组合的方式】,因为继承会无形之中继承到很多用不上的东西
尤其是不是知道父类在之前已经继承过什么东西,那将会使得当前子类得到更多无用的东西
这里的继承写法,组合写法貌似使用上没有什么区别,但他们在本质上是完全不同的概念
继承相当于手对于人,是一种强绑定的所属关系
组合相当于车对于人,是一种弱绑定的所属关系
能用弱绑定关系解决的问题,坚决不用强绑定关系解决
package main
import "fmt"
type person struct{}
func (p *person) eat() {
fmt.Println("人吃饭")
}
func (p *person) sleep() {
fmt.Println("人吃睡觉")
}
type student struct {
person //继承
}
func (s *student) study() {
fmt.Println("学生学习")
}
type worker struct {
//p person//值组合
p *person //指针组合
}
func (w *worker) work() {
fmt.Println("工人工作")
}
func main() {
//接口隔离原则就是尽量使用【组合的方式】
stu := student{}
stu.study()
}