一、适配器模式介绍
适配器模式(Adapter Design Pattern):适配器是结构型模式,用来将不同规范的类,通过组合的方式对这些类进行统一规范管理。
或者说
适配器用来将不兼容的接口转变为兼容,组合多个接口不兼容的类,统一提供功能。
适配器有两种通用模式:
1、类适配器
通过继承的方式实现适配
2、对象适配器
通过组合的方式实现适配
二、适配器模板(使用套路)
背景
当前存在多个旧代码类,其中某个类 **Adaptee**
,如下:
针对旧版本代码,当前新版本功能不在直接进行使用,**Adaptee**
不在对外提供操作,这时候通过统一的接口规范进行适配旧代码,达到即使 **Adaptee**
本身不对外开放,但是类的功能,仍然可以访问操作的目的。
2.1、类适配器
实现代码与代码类图如下
如上图所示,原先的功能调用直接调用 **Adaptee**
旧代码方法即可,现在通过适配的方式重新进行组合,并规范了适配器调用接口 **Target**
,方法的调用通过 **AdapterTarget**
适配器间接调用之前旧代码,功能不变,但是屏蔽了 **Adaptee**
对外的操作权限。
2.2、对象适配
代码实现和类图如下
同样通过适配,在外层存在有统一规范的适配器接口 Target
,然后通过调用适配器 AdapterTarget
,间接调用旧代码 Adaptee
从而达到直接调用新接口规范 Target
即可适配旧代码 Adaptee
的实现。
三、总结
适配器模板套路:
1、定义新的组合规范,如:Target
接口。
2、通过实现 Target
生成一个适配器 AdapterTarget
3、AdapterTarget
适配器通过继承,或者组合受适配的对象 Adaptee
,用户在调用 适配器AdapterTarget
的新方法时,调用的其实是被继承或者组合进来的 Adaptee
对象。
在使用中要如何选择,“对象适配” or “类适配” ?
适配主要是为了通过新的规范重新组合一个或者多个 Adaptee
(需要被适配的旧代码) 来完成新的功能组合。
Adaptee
被适配的旧代码本身可能实现有自身接口规范,
1、如果旧代码 Adaptee
自身实现的接口少,或者没有,那么使用 类适配器或者对象适配器都可以
2、如果旧代码 Adaptee
实现的接口多,且接口和我们需要定义的接口规范 Target
相似,可以直接使用 类适配器,通过继承的方式复用接口规范。
3、如果旧代码 Adaptee
实现的接口多,但是接口的定义和我们需要定义的规范 Target
不一样,或者大部分不同,这时候推荐使用 对象适配器,通过组合的方式来进行调用。
【公众号】花好夜猿