设计模式之适配器模式-创新互联
设计模式之适配器模式
概述
分享标题:设计模式之适配器模式-创新互联
标题链接:http://scyanting.com/article/hcssh.html
适配器模式: 将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装类(Wrapper),适配器模式既可以作为类结构型模式,也可以作为对象结构型模式
创新互联公司2013年成立,是专业互联网技术服务公司,拥有项目成都网站设计、成都网站制作网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元仁寿做网站,已为上家服务,为仁寿各地企业和个人服务,联系电话:13518219792- 在适配器模式定义中所提及的接口是指广义的接口,它可以表示一个方法或者方法的集合
类似封装(设计模式使用了大量的继承、封装、闭包、高阶函数等方法)
在适配器模式中,通过增加一个新的适配器类来解决接口不兼容的问题,使得没有任何关系的类可以协同工作。根据适配器类与适配者类的关系不同,适配器模式可分为对象适配器模式和类适配器模式两种。在对象适配器模式中,适配器与适配者之间是关联关系;在类适配器模式中,适配器与适配者之间是继承(或实现)关系
对象适配器模式包含3个角色
- Target(目标抽象类): 目标抽象类定义客户所需接口,可以是一个抽象类或接口,也可以是具体类
- Adapter(适配器类): 适配器可以调用另一个接口,作为一个转换器,对Adaptee和Target进行适配。适配器类是适配器模式的核心,在对象适配器模式中,他通过继承Target并关联一个Adaptee对象使二者产生联系
- Adaptee(适配者类):适配者即被适配的对象,它定义了一个已经存在的接口,这个接口需要适配,适配者类一般是一个具体的类,包含了客户希望使用的业务方法,在某些情况下可能没有适配者类的源代码
假设我们现在只有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元起,快前往官网查看详情吧
分享标题:设计模式之适配器模式-创新互联
标题链接:http://scyanting.com/article/hcssh.html