Go语言自学系列golang通过接口实现OCP设计原则
视频来源:B站《golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]》
一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持!
附上汇总贴:Go语言自学系列 | 汇总_COCOgsta的博客-CSDN博客
面向对象的可复用设计的第一块基石,便是所谓的"开-闭"原则(Open-Closed Principle,常缩写为OCP)。虽然,go不是面向对象语言,但是也可以模拟实现这个原则。对扩展是开放的,对修改是关闭的。OCP设计原则实例
下面通过一个人养宠物的例子,来解释OCP设计原则。
定义一个宠物接口Pettype Pet interface { eat() sleep() }
该接口有吃和睡两个方法。
定义个Dog结构体type Dog struct { name string age int }
Dog实现接口方法func (dog Dog) eat() { fmt.Println("dog eat...") } func (dog Dog) sleep() { fmt.Println("dog sleep...") }
定义一个Cat结构体type Cat struct { name string age int }
Cat实现接口方法func (cat Cat) eat() { fmt.Println("cat eat...") } func (cat Cat) sleep() { fmt.Println("cat sleep...") }
定义个Person结构体type Person struct { name string }
为Person添加一个养宠物方法func (per Person) care(pet Pet) { pet.eat() pet.sleep() }
最后测试一下package main import "fmt" type Pet interface { eat() sleep() } type Dog struct { name string age int } type Cat struct { name string age int } type Person struct { name string } func (dog Dog) eat() { fmt.Println("dog eat...") } func (dog Dog) sleep() { fmt.Println("dog sleep...") } func (cat Cat) eat() { fmt.Println("cat eat...") } func (cat Cat) sleep() { fmt.Println("cat sleep...") } func (per Person) care(pet Pet) { pet.eat() pet.sleep() } func main() { dog := Dog{} cat := Cat{} per := Person{} per.care(dog) per.care(cat) }
运行结果[Running] go run "d:SynologyDrive软件开发gogolang入门到项目实战goproject360duote.compro01 est.go" dog eat... dog sleep... cat eat... cat sleep...