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{})
相关推荐
zmzb010317 分钟前
C++课后习题训练记录Day91
开发语言·c++
我要打打代码21 分钟前
关于C#线程 任务
开发语言·数据库·c#
小猪咪piggy24 分钟前
【Python】(2) 执行顺序控制语句
开发语言·python
Σdoughty26 分钟前
python第三次作业
开发语言·前端·python
是萧萧吖26 分钟前
每日一练——有效的括号
java·开发语言·javascript
MediaTea28 分钟前
Python:内置类型也是类对象
开发语言·python
gpldock22231 分钟前
Flutter App Templates Deconstructed: A 2025 Architectural Review
开发语言·javascript·flutter·wordpress
Ivanqhz32 分钟前
现代异构高性能计算(HPC)集群节点架构
开发语言·人工智能·后端·算法·架构·云计算·边缘计算
参.商.37 分钟前
【Day25】26.删除有序数组中的重复项 80.删除有序数组中的重复项II
leetcode·golang
小高Baby@1 小时前
ShouldBind、ShouldBindJson、ShouldBindQuery的区别
后端·golang