欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Go基础学习-接口设计原则(开闭原则、依赖倒装原则)

程序员文章站 2022-04-11 21:53:00
接口设计原则开闭原则//接口设计的开闭原则(以银行业务为例)//AbstractBanker 抽象一个AbstractBanker业务员type AbstractBanker interface {DoBusiness() //抽象的接口 业务接口}//实现一个架构层(基于抽象的接口来封装 ,就是在不知道具体有哪些Banker的情况下)func BankerBusi(a AbstractBanker){a.DoBusiness() //多态的现象}//SaveBanker...

接口设计原则

  • 开闭原则
    Go基础学习-接口设计原则(开闭原则、依赖倒装原则)
//接口设计的开闭原则(以银行业务为例)

//AbstractBanker 抽象一个AbstractBanker业务员
type AbstractBanker interface {
	DoBusiness()  //抽象的接口 业务接口
}
//实现一个架构层(基于抽象的接口来封装 ,就是在不知道具体有哪些Banker的情况下)
func BankerBusi(a AbstractBanker){
	a.DoBusiness() //多态的现象
}
//SaveBanker 存款的Banker
type SaveBanker struct {
}
//TransBanker 转账的Banker
type TransBanker struct {
}
func (s *SaveBanker)DoBusiness(){
	fmt.Println("存款业务")
}
func (s *TransBanker)DoBusiness(){
	fmt.Println("转账业务")
}
func main(){
	BankerBusi(&SaveBanker{})
	BankerBusi(&TransBanker{})
}
  • 依赖倒装原则
    Go基础学习-接口设计原则(开闭原则、依赖倒装原则)

//-------------------
//抽象层
//-------------------
type Car interface {
	Run()
}
type Driver interface {
	Drive(car Car)
}

//-------------------
//实现层
//-------------------
//car
type Benc struct {}
func (b *Benc)Run(){}

type BMW struct {}
func (b *BMW)Run(){}

type Fent struct {}
func (f *Fent)Run(){}

//driver
type ZhanS struct {}
func (f *ZhanS)Drive(car Car){
	car.Run()
}

type LiS struct {}
func (z *LiS)Drive(car Car){
	car.Run()
}

type WanW struct {}
func (f *WanW)Drive(car Car){
	car.Run()
}
//-------------------
//业务逻辑层
//-------------------
func main(){
	// 业务1:ZhanS开奔驰
	var z ZhanS
	var fentian Car
	fentian=&Fent{}  //多态
	z.Drive(fentian)
}
//模拟组装2台电脑

//------------------------
//抽象层:
//有显卡Card 方法:display()
//有内存Memory storage()
//Cpu calcalate()
//------------------------


//------------------------
//实现层:
//有Intel公司  产品:Card Memory Cpu
//Kingston公司 产品:Memory
//NVIDIA公司  产品:Card
//------------------------

//------------------------
//逻辑层:
//组装Intel系列的电脑 并运行
//组装Intel Cpu、Kingston Memory、NVIDIA Card混合的电脑并运行
//------------------------

//------------抽象层------------
type Card interface {
	Display()
}
type Memory interface {
	Storage()
}
type Cpu interface {
	Calcalate()
}


type Computer struct {
	ItemCard Card
	ItemMemory Memory
	ItemCpu Cpu
}

//NewComputer  初始化一个computer类对象
func NewComputer(cpu Cpu,card Card,memory Memory)(c *Computer){
	c=&Computer{        //多态性
		ItemCard: card,
		ItemCpu: cpu,
		ItemMemory: memory,
	}
	return
}
func (c *Computer)Work(){
	c.ItemCard.Display()
	c.ItemMemory.Storage()
	c.ItemCpu.Calcalate()
}
//------------实现层------------
type IntelCpu struct {

}
func (i *IntelCpu)Calcalate(){

}
type IntelCard struct {

}
func (i *IntelCard)Display(){

}
type IntelMemory struct {

}
func (i *IntelMemory)Storage(){

}
type KingMemory struct {

}
func (k *KingMemory)Storage(){

}
type NVIDCard struct {

}
func (n *NVIDCard)Display(){

}


//------------逻辑层------------
func main(){
	//组装Intel系列的电脑 并运行
	intelComputer:=NewComputer(&IntelCpu{},&IntelCard{},&IntelMemory{})
	intelComputer.Work()
	//组装Intel Cpu、Kingston Memory、NVIDIA Card混合的电脑并运行
	mixComputer:=NewComputer(&IntelCpu{},&NVIDCard{},&KingMemory{})
	mixComputer.Work()
}

本文地址:https://blog.csdn.net/wzb_wzt/article/details/107380699