网站备案时间怎么查询系统,岳阳网站开发商城,中国最新军事新闻直播,同ip网站做排名seo适配器模式 概述示例适配器的种类小结 概述
适配器其实非常好理解#xff0c;放到生活中来#xff0c;我们身边处处都有这样的例子#xff0c;最常见的是用的比较多的各种转接线#xff08;如#xff1a;USB 转 Type-C#xff09;#xff0c;有了这个“适配器”放到生活中来我们身边处处都有这样的例子最常见的是用的比较多的各种转接线如USB 转 Type-C有了这个“适配器”我们就能够将电脑和手机等设备相进行连接而不需要改动电脑/手机的原有接口。
示例
回到编程的世界中假设我们的某个程序一直依赖一个很久远的接口 OldBusinessInterface这个时候由于业务需求需要使用到比较新的接口 NewBusinessInterface由于历史原因将不对旧的代码进行修改 因此目前的方案是将使用 适配器模式 去让 NewBusinessInterface 去适配 OldBusinessInterface。 代码在线运行
package mainimport fmt// OldBusinessInterface 这是旧的接口
type OldBusinessInterface interface {OldBusinessMethodA(str string) intOldBusinessMethodB()
}// OldBusiness 这是旧的业务类实现了旧的接口
type OldBusiness struct {
}func (o *OldBusiness) OldBusinessMethodA(str string) int {fmt.Println(OldBusinessMethodA is called)return len(str)
}func (o *OldBusiness) OldBusinessMethodB() {fmt.Println(OldBusinessMethodB is called)
}// NewBusinessInterface 这是新的接口
type NewBusinessInterface interface {NewBusinessMethodA(str string) int
}// NewBusiness 这是新的业务类实现了新的接口
type NewBusiness struct {
}func (n *NewBusiness) NewBusinessMethodA(str string) int {fmt.Println(NewBusinessMethodA is called)return len(str)
}// OldBusinessMethod 这是旧的业务方法依赖于旧的接口但是新的业务类没有实现旧的接口
func OldBusinessMethod(a OldBusinessInterface) {a.OldBusinessMethodA(hello)
}// Adapter 这是适配器实现了旧的接口但是依赖于新的接口这样就可以在旧的业务方法中使用新的业务类了
type Adapter struct {NewBusinessInterface
}func (a *Adapter) OldBusinessMethodA(str string) int {fmt.Println([Adapter] OldBusinessMethodA is called)return a.NewBusinessMethodA(str)
}func (a *Adapter) OldBusinessMethodB() {fmt.Println([Adapter] OldBusinessMethodB is called)
}func main() {// 旧的使用姿势OldBusinessMethod(OldBusiness{})fmt.Println(------------------)// 使用适配器可以在旧的业务方法中使用新的业务类了OldBusinessMethod(Adapter{NewBusiness{}})
}运行结果:
OldBusinessMethodA is called
------------------
[Adapter] OldBusinessMethodA is called
NewBusinessMethodA is called 通过适配器我们能够将 B 接口变成 A 接口通过这个方式我们不需要再重新写一个新的实现类而是只需要增加一个 适配器这种感觉就是你现在只有一个安卓充电线但是你的手机是 Type-C 的接口这个时候你只需要通过一个 转接线 就可以让 Type-C 接口的手机使用安卓充电线而不用重新再买一个 Type-C 接口的充电器这确实能够方便很多当然重新买一个充电器也并不是说不可取这需要结合实际场景考虑各方面的因素来选择最合适的方案。
适配器的种类
实际上适配器有“两种”对象适配器 和 类适配器 。 对象适配器 类适配器
其实本质上只是适配的目标不同而已我们刚才的代码是针对接口而做的适配其实就是对象适配器对于类适配器其实就是针对类型进行适配在 Java 中就是对 Class 进行的适配使用此方式的前提条件是 编程语言支持多继承如图Adapter 继承了目标类和待适配的类。
小结 模式定义 将一个类的接口转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。
总结以上的内容说白了适配器其实就是一个中间层可以让原本不兼容的接口转换成目标接口最核心的是 “转换” 二字。如果你了解过外观模式和装饰模式你可能会对他们三个感到有些困惑分不清他们的差异不用担心我在之后的文章会对他们三个的差异做出解释。
以上便是本篇的全部内容了如果内容存在又问题的地方欢迎指点。