您的位置 首页 golang

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

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

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

附上汇总贴:


面向对象的可复用设计的第一块基石,便是所谓的“开-闭”原则(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设计原则

文章地址:https://www.zhihuclub.com/86554.shtml

关于作者: 智云科技

热门文章

发表评论

您的电子邮箱地址不会被公开。

网站地图