适配器模式(一)

116 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情

这篇文章我们介绍适配器模式的概念和使用场景。

适配器模式的概念

基本概念

日常中,我们可能看到过一些xxxWrapper 或者xxxAdapter 这种类似的代码,这些如果不是乱起名,那就很大可能都是“适配器模式”。

适配器从名字就可以看出,为了“适配”而生。

适配器模式可以将某个类的暴露的接口适配成用户所期待的样子。这样就可以允许通常因为接口不兼容而不能在一起工作的类完成协作。其一般做法就是将类的接口包裹在一个已经存在的类里面。

适配器模式的作用

适配器模式本身是一种结构型设计模式,它能作用就是让原本因为接口不匹配的两个类可以在一起工作。

举例来说,这种就像你想手机app 在pc 上运行,这时候提供一个“模拟器”,就可以达到既定的目的。这个模拟器,也就相当于我们这片文章中的主角,适配器。

再进一步讲,它就是作为一个“中转站”,或者说实现一个“封装器”的功能。它可以接收针对某个对象的调用结果,将此结果转换成另一个对象暴露出的接口的请求,完成调用通路。

适配器模式的优缺点

适配器的优点我们可以很明显地就发现

  1. 实现了单一职责原则:可以将数据转换代码从程序的业务逻辑中分离出来。
  2. 实现了开闭原则:客户端代码是与适配器进行交互的,所以对于源头来说,就可以实现在不修改现有代码的情况下来适配新的目标。

其缺点也比较明显

增加了代码的复杂性,有时候我们可能仅仅需要完成一个小小的功能,如果引入适配器模式,可能会增加很多的接口或者类,所以我们应该依据不同场景进行不同的分析。

适配器模式的使用场景

其实适配器模式如果要细分,可以分为三种:

  1. 类适配器模式
  2. 对象适配器模式
  3. 接口适配器模式

但是虽然适配器模式可以细分成三种,但是其使用场景都是万变不离其宗的。

  1. 系统需要使用一个现有(已经存在)的类,但是这个类却不能兼容使用场景。
  2. 需要有一个统一的输出接口,但是输入类型却不可预见。
  3. 需要建立一个可以重复使用的类,以将一些彼此关闭不大的类进行协作,同时方便拓展,以便适配于将来可能会出现的类。

适配器有三个角色,分别是:源头、适配器、目标

适配器要做的就是通过适配器类将源头适配为目标。

总结

这篇文章我们主要介绍了适配器模式的相关概念和使用场景,接下来会使用具体的例子来介绍适配器模式的具体使用。