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

Posted COCOgsta

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go语言自学系列 | golang通过接口实现OCP设计原则相关的知识,希望对你有一定的参考价值。

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

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

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


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

OCP设计原则实例

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

定义一个宠物接口Pet

type 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\\软件开发\\go\\golang入门到项目实战\\goproject\\360duote.com\\pro01\\test.go"
dog eat...
dog sleep...
cat eat...
cat sleep...

以上是关于Go语言自学系列 | golang通过接口实现OCP设计原则的主要内容,如果未能解决你的问题,请参考以下文章

Go语言自学系列 | golang并发编程之WaitGroup实现同步

Go语言自学系列 | golang并发编程之Mutex互斥锁实现同步

Go语言自学系列 | golang包

Go语言自学系列 | golang数组

Go语言自学系列 | golang标准库bytes

Go语言自学系列 | golang高阶函数