适配器模式: 将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装类(Wrapper),适配器模式既可以作为类结构型模式,也可以作为对象结构型模式
创新互联公司2013年成立,是专业互联网技术服务公司,拥有项目成都网站设计、成都网站制作网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元仁寿做网站,已为上家服务,为仁寿各地企业和个人服务,联系电话:13518219792类似封装(设计模式使用了大量的继承、封装、闭包、高阶函数等方法)
在适配器模式中,通过增加一个新的适配器类来解决接口不兼容的问题,使得没有任何关系的类可以协同工作。根据适配器类与适配者类的关系不同,适配器模式可分为对象适配器模式和类适配器模式两种。在对象适配器模式中,适配器与适配者之间是关联关系;在类适配器模式中,适配器与适配者之间是继承(或实现)关系
对象适配器模式包含3个角色
假设我们现在只有type-C的充电口,但是我们需要给只接受USB充电口的设备充电,这个时候我们就需要一个充电适配器来进行充电接口的转换
package adapter
import "fmt"
// USBTarget 目标接口
type USBTarget interface {USBCharge()
}
// Adapter 适配器
type Adapter struct {Adaptee TypeCAdaptee
}
func NewAdapter(adaptee TypeCAdaptee) *Adapter {return &Adapter{Adaptee: adaptee,
}
}
func (a *Adapter) USBCharge() {fmt.Println("充电接口转换->USB")
a.Adaptee.TypeCCharge()
}
// TypeCAdaptee 适配者
type TypeCAdaptee struct {}
func (t *TypeCAdaptee) TypeCCharge() {fmt.Println("开始充电")
}
这里我们定义了一个目标接口
// USBTarget 目标接口
type USBTarget interface {USBCharge()
}
还有一个Type-C的充电接口,这个Type-C接口是没办法进行USB充电的
// TypeCAdaptee 被适配者
type TypeCAdaptee struct {}
func (t *TypeCAdaptee) TypeCCharge() {fmt.Println("开始充电")
}
如果我们手里只有Type-C的接口,是没办法使用USB的充电的,所以这里还需要有一个充电适配器
// Adapter 适配器
type Adapter struct {Adaptee TypeCAdaptee
}
func NewAdapter(adaptee TypeCAdaptee) *Adapter {return &Adapter{ Adaptee: adaptee,
}
}
func (a *Adapter) USBCharge() {fmt.Println("充电接口转换->USB")
a.Adaptee.TypeCCharge()
}
这个充电适配器实现了USB充电的方法,在内部将充电的方法进行了转换,最后完成了USB的充电
测试package adapter
import "testing"
func TestAdapter_ChargeAdapter(t *testing.T) {typeCAdaptee := TypeCAdaptee{}
adapter := NewAdapter(typeCAdaptee)
adapter.USBCharge()
}
//
// === RUN TestAdapter_ChargeAdapter
// 充电接口转换,USB
// 充电
// --- PASS: TestAdapter_ChargeAdapter (0.00s)
// PASS
总结
优点你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧