开闭原则(OCP)
类的改动是通过增加代码进行的,而不是修改源代码
// 抽象的老师
type AbstractTeacher interface {
Teach() // 抽象的教学接口
}
// 数学老师
type MathTeacher struct {
}
func (m *MathTeacher) Teach() {
fmt.Println("教数学。。。。")
}
// 语文老师
type ChineseTeacher struct {
}
func (c *ChineseTeacher) Teach() {
fmt.Println("教语文。。。")
}
// 基于抽象层进行业务封装-针对interface接口的封装
func TeacherTeaching(techer AbstractTeacher) {
// 通过接口向下调用
techer.Teach()
}
func main() {
教数学
//mt := MathTeacher{}
//mt.Teach()
教语文
//ct := ChineseTeacher{}
//ct.Teach()
// 教数学
TeacherTeaching(&MathTeacher{})
// 教语文
TeacherTeaching(&ChineseTeacher{})
}