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{})
相关推荐
码界索隆5 小时前
Python转Java系列:前言
java·开发语言·python
asdfg12589635 小时前
一文理解Java中的泛型
java·开发语言
Hiter_John5 小时前
Golang的变量常量初始化
开发语言·后端·golang
电商API_180079052475 小时前
免 TOP 入驻,第三方淘宝商品详情 API 快速接入与代码示例
java·大数据·开发语言·数据库·爬虫·数据分析
c238565 小时前
C++列表初始化与变量类型推导
开发语言·c++
代码小库5 小时前
【2026前端最新面试题——day10】JavaScript 高频面试题
开发语言·前端·javascript
零陵上将军_xdr6 小时前
后端转全栈学习-Day4-JavaScript 基础-2
开发语言·javascript·学习
小科先生6 小时前
初学者安装java
java·开发语言
ID_180079054736 小时前
小红书笔记评论 API 接口深度解析(带全套 JSON 示例・技术实战版)
java·开发语言·windows
折戟不必沉沙6 小时前
C++四种类型转换是什么
开发语言·c++