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{})
相关推荐
CoderYanger13 分钟前
前端基础——CSS练习项目:百度热榜实现
开发语言·前端·css·百度·html·1024程序员节
虾..38 分钟前
C++ 哈希
开发语言·c++·哈希算法
liu****1 小时前
14.日志封装和线程池封装
linux·开发语言·c++
青青草原羊村懒大王1 小时前
python基础知识三
开发语言·python
将编程培养成爱好1 小时前
C++ 设计模式《统计辅助功能》
开发语言·c++·设计模式·访问者模式
fie88891 小时前
基于循环谱分析的盲源分离信号处理MATLAB
开发语言·matlab·信号处理
kgduu1 小时前
go-ethereum之rpc
开发语言·rpc·golang
yong99902 小时前
MATLAB倍频转换效率分析与最佳匹配角模拟
开发语言·前端·matlab
已黑化的小白2 小时前
Rust 的所有权系统,是一场对“共享即混乱”的编程革命
开发语言·后端·rust
csbysj20202 小时前
TypeScript 元组
开发语言