一、适配器模式介绍

适配器模式(Adapter Design Pattern):适配器是结构型模式,用来将不同规范的类,通过组合的方式对这些类进行统一规范管理。

或者说

适配器用来将不兼容的接口转变为兼容,组合多个接口不兼容的类,统一提供功能。

适配器有两种通用模式:
1、类适配器

通过继承的方式实现适配

2、对象适配器

通过组合的方式实现适配

二、适配器模板(使用套路)

背景
当前存在多个旧代码类,其中某个类 **Adaptee**,如下:

[设计模式]-[结构型]-适配器-介绍 - 图1

针对旧版本代码,当前新版本功能不在直接进行使用,**Adaptee** 不在对外提供操作,这时候通过统一的接口规范进行适配旧代码,达到即使 **Adaptee** 本身不对外开放,但是类的功能,仍然可以访问操作的目的。

2.1、类适配器

实现代码与代码类图如下

[设计模式]-[结构型]-适配器-介绍 - 图2

如上图所示,原先的功能调用直接调用 **Adaptee** 旧代码方法即可,现在通过适配的方式重新进行组合,并规范了适配器调用接口 **Target** ,方法的调用通过 **AdapterTarget** 适配器间接调用之前旧代码,功能不变,但是屏蔽了 **Adaptee** 对外的操作权限。

2.2、对象适配

代码实现和类图如下

[设计模式]-[结构型]-适配器-介绍 - 图3

同样通过适配,在外层存在有统一规范的适配器接口 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 不一样,或者大部分不同,这时候推荐使用 对象适配器,通过组合的方式来进行调用。


【公众号】花好夜猿
wxlogo.jpg