(18条消息) Go语言自学系列 | golang通过接口实现OCP设计原则_COCOgsta的博客-CSDN博客



Go语言自学系列 | golang通过接口实现OCP设计原则

COCOgsta 于 2022-04-25 19:15:47 发布 23 收藏
分类专栏: 视频学习笔记 文章标签: golang

视频来源:B站《golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]》

一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持!

附上汇总贴:Go语言自学系列 | 汇总_COCOgsta的博客-CSDN博客


面向对象的可复用设计的第一块基石,便是所谓的“开-闭”原则(Open-Closed Principle,常缩写为OCP)。虽然,go不是面向对象语言,但是也可以模拟实现这个原则。对扩展是开放的,对修改是关闭的。

OCP设计原则实例

下面通过一个人养宠物的例子,来解释OCP设计原则。

定义一个宠物接口Pet

  1. 1
    type Pet interface {
  2. 2
    eat()
  3. 3
    sleep()
  4. 4
    }

该接口有吃和睡两个方法。

定义个Dog结构体

  1. 1
    type Dog struct {
  2. 2
    name string
  3. 3
    age int
  4. 4
    }

Dog实现接口方法

  1. 1
    func (dog Dog) eat() {
  2. 2
    fmt.Println("dog eat...")
  3. 3
    }
  4. 4
  5. 5
    func (dog Dog) sleep() {
  6. 6
    fmt.Println("dog sleep...")
  7. 7
    }
  8. 8

定义一个Cat结构体

  1. 1
    type Cat struct {
  2. 2
    name string
  3. 3
    age int
  4. 4
    }

Cat实现接口方法

  1. 1
    func (cat Cat) eat() {
  2. 2
    fmt.Println("cat eat...")
  3. 3
    }
  4. 4
  5. 5
    func (cat Cat) sleep() {
  6. 6
    fmt.Println("cat sleep...")
  7. 7
    }
  8. 8

定义个Person结构体

  1. 1
    type Person struct {
  2. 2
    name string
  3. 3
    }

为Person添加一个养宠物方法

  1. 1
    func (per Person) care(pet Pet) {
  2. 2
    pet.eat()
  3. 3
    pet.sleep()
  4. 4
    }
  5. 5

最后测试一下

  1. 1
    package main
  2. 2
  3. 3
    import "fmt"
  4. 4
  5. 5
    type Pet interface {
  6. 6
    eat()
  7. 7
    sleep()
  8. 8
    }
  9. 9
  10. 10
    type Dog struct {
  11. 11
    name string
  12. 12
    age int
  13. 13
    }
  14. 14
  15. 15
    type Cat struct {
  16. 16
    name string
  17. 17
    age int
  18. 18
    }
  19. 19
  20. 20
    type Person struct {
  21. 21
    name string
  22. 22
    }
  23. 23
  24. 24
    func (dog Dog) eat() {
  25. 25
    fmt.Println("dog eat...")
  26. 26
    }
  27. 27
  28. 28
    func (dog Dog) sleep() {
  29. 29
    fmt.Println("dog sleep...")
  30. 30
    }
  31. 31
  32. 32
    func (cat Cat) eat() {
  33. 33
    fmt.Println("cat eat...")
  34. 34
    }
  35. 35
  36. 36
    func (cat Cat) sleep() {
  37. 37
    fmt.Println("cat sleep...")
  38. 38
    }
  39. 39
  40. 40
    func (per Person) care(pet Pet) {
  41. 41
    pet.eat()
  42. 42
    pet.sleep()
  43. 43
    }
  44. 44
  45. 45
    func main() {
  46. 46
    dog := Dog{}
  47. 47
    cat := Cat{}
  48. 48
    per := Person{}
  49. 49
  50. 50
    per.care(dog)
  51. 51
    per.care(cat)
  52. 52
    }

运行结果

  1. 1
    [Running] go run "d:\SynologyDrive\软件开发\go\golang入门到项目实战\goproject\360duote.com\pro01\test.go"
  2. 2
    dog eat...
  3. 3
    dog sleep...
  4. 4
    cat eat...
  5. 5
    cat sleep...

yg9538 July 22, 2022, 10:48 p.m. 222 收藏文档