一.适配器模式的概述

设计模式(Design pattern)是一套被反复使用、众所周知的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。工程中会经常用到设计模式,这样的代码编程效率和编程质量会更好。

在生活和学习中也会经常碰到这样的例子。最简单来说,电压的大小标准,在国际上 各个国家都有不同的标准。中国220V,日本是100V,美国120V,各个国家有不同的标准,但是电脑是统一的厂家生产的。不可能到每个国家就必须要换电脑,所以出现了电源适配器,可以根据各种电压来调节适合自己电脑的充电电压。

适配器模式是其中的23种设计模式中的一种。我们在进行系统开发时,总会有许多诸如可行性分析、需求分析的系统设计处理文档,但往往也会在一些场景里面出现一些Bug。这些Bug出现系统即将完成或者已经完成的阶段,肯定不能完全推翻之前的设计,重新开发新的系统。这是就会用到一种设计模式-适配器模式,它可以帮助我们做一些补救工作,解决出现的Bug。

二.适配器模式的定义

何谓适配器模式?Convert the interface of a class into another interface clients expect. Adapter lets classes work together that couldn`t otherwise because of incompatible interfaces.(将一个类的接口换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。)

       适配器模式又叫变压器模式,也是包装模式中的一种。

       A、B两个框图代表已经塑模成型的物体A和物体B,那现在要求把A和B安装在一起使用,如何安装?两者的接口不一致,是不可能安装在一起使用的,如何做呢?引入如下图一个物体C

  A、B两个框图代表已经塑模成型的物体A和物体B

引入物体C以后,C适应了物体A的接口,同时也适应了物体B的接口,然后三者就可以组合成一个物体了,如下图

 引入物体C

C适应了物体A的接口,同时也适应了物体B的接口,然后三者就可以组合成一个物体了

适配器模式类图:

 适配器模式类图

三.适配器模式的应用

适配器模式的优点:

  • 适配器模式可以让两个没有任何关系的类一起运行;
  • 增加了类的透明性;
  • 提高了类的复用度;
  • 灵活性很好

应用场景:

通常是用来解决接口不相容的问题的。

  • 在原来已有接口的情况下,想修改其满足其他功能,这是可能就要用到适配器模式了,比如说系统扩展。
  • 为了提高类的复用时使用
  • 类的适配器模式使用起来有点像多重继承机制,利用接口的特性,把一些零散类组织到一起,成为一个新的类来实现调用,并且看起来像是对一个类的操作。实际上,适配器模式更多的是强调对代码的组织,而不是功能的实现。

注意事项:

       一定要遵守依赖倒转原则和里氏替换原则。

       在系统初始设计阶段不要考虑适配器模式,因为适配器模式是为了解决诸如系统扩展之类的问题,不要牵扯到功能开发阶段。

四.适配器模式的实现

       适配器模式(Adapter)就是把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作。那么适配器模式是通过什么方式来实现的呢?

      既然要将原来不相关的类组织到一起来使用其所提供的服务,就是说将所有接口提供的服务集中到一块,那么就可以通过实现接口和继承类来实现,并对其中需要进行修改的地方进行修改一适配已有接口所提供的的服务。

五.分析实例

校园卡(图书卡)是一种用来识别学生身份信息的RFID卡片,本身携带一定信息,

比如学生姓名、性别、年龄、身份等一些基本个人信息。但是,近来学校实行一卡通,学生的饭卡和图书卡集成到一块,使一张卡具有两张卡的功能。原本的两个功能接口就无法继续使用,而重新设计有需要大动干戈,花费很大,所以可以通过适配器模式来解决这种问题。

场景实例UML类图:

 场景实例UML类图

 Lib_Card(身份识别)接口 

View Code

实现Lib_Card接口

View Code

Food_Card接口,用于校内消费支付

View Code

实现Food_Card接口  

View Code

适配器类

View Code

实现场景类

View Code