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{})
相关推荐
朝朝辞暮i1 小时前
C++ 第 23 课:class —— 开始真正进入面向对象
开发语言·c++·算法
小师兄吃牛肉2 小时前
C语言篇:宏
c语言·开发语言
郑同学的笔记2 小时前
【c++随笔28】strcmp 和 memcmp对比
开发语言·c++
言乐63 小时前
Python根据无法识别搜索词找出可能输入内容模型
开发语言·python·django·virtualenv·pygame
weixin_307779133 小时前
有限产能智能排产与动态重排智能体:从需求解构到技术实现
开发语言·人工智能·算法·架构
kakakahahahaha3 小时前
Windows C盘临时文件清理:%temp%、Windows Temp、Prefetch、Windows.old与hiberfil.sys处理指南
c语言·开发语言·windows
朝朝辞暮i3 小时前
C++ 第 27 课:智能指针 shared_ptr
开发语言·c++·算法
朝朝辞暮i4 小时前
C++ 第 29 课:回调函数 Callback
开发语言·c++·算法
笨笨饿4 小时前
140_AI新手村MCP与Skills是干嘛的
开发语言·人工智能·python·stm32·单片机·嵌入式硬件·物联网
YOLO数据集集合4 小时前
EvoAgent:面向PR研发治理的自进化Multi-Agent Harness系统
java·开发语言·目标检测·agent·自进化