文章目录
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{})