Golang接口实现OCP原则

文章目录

Golang接口实现OCP原则

OCP: Open-Closed Principle 开闭原则,对扩展是开发的,对修改是关闭的。

实例

go 复制代码
package main

import "fmt"

type Pet interface {
	eat()
	sleep()
}
type Dog struct {
}
type Cat struct {
}

func (dog *Dog) eat() {
	fmt.Println("dog eating...")
}
func (dog *Dog) sleep() {
	fmt.Println("dog sleeping...")
}
func (cat *Cat) eat() {
	fmt.Println("cat eating...")
}
func (cat *Cat) sleep() {
	fmt.Println("cat sleeping...")
}

type Person struct {
}

func (p *Person) care(pet Pet) {
	pet.eat()
	pet.sleep()
}

func main() {
	var p = Person{}
	p.care(&Cat{})
	p.care(&Dog{})
}

这里定义了三个结构体:Person, Dog, Cat 一个接口Pet,同时Dog和Cat都实现了Pet接口。Person有一个care方法(养宠物)。

任何实现了Pet接口的类型都可以作为care的参数进行使用(Person可以care任意的Pet)。

假设有一个Pig也实现了Pet接口,则可以p.care(&Pig{})这样使用。

go 复制代码
type Pig struct {
}
func (pig *Pig) eat() {
	fmt.Println("pig eating...")
}
func (pig *Pig) sleep() {
	fmt.Println("pig sleeping...")
}
func main() {
    ...
    p.care(&Pig{})
相关推荐
阳光_你好1 小时前
简单介绍C++中线性代数运算库Eigen
开发语言·c++·线性代数
你采不起的野花5 小时前
Go 语言 vs C+Lua(Skynet)游戏服务器方案对比分析
游戏·golang·lua
风逸hhh5 小时前
python打卡day29@浙大疏锦行
开发语言·前端·python
ᖰ・◡・ᖳ5 小时前
JavaScript:PC端特效--缓动动画
开发语言·前端·javascript·css·学习·html5
hy____1235 小时前
C++多态的详细讲解
开发语言·c++
小葡萄20255 小时前
黑马程序员C++2024版笔记 第0章 C++入门
开发语言·c++·笔记
万物此臻6 小时前
C#编写软件添加菜单栏
开发语言·c#
RongSen336 小时前
Python海龟绘图(Turtle Graphics)核心函数和关键要点
开发语言·python
小贾要学习6 小时前
【C语言】贪吃蛇小游戏
c语言·开发语言·游戏
程序员爱钓鱼6 小时前
defer关键字:延迟调用机制-《Go语言实战指南》
开发语言·后端·golang