适配器模式(二)

237 阅读3分钟

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

通过上一篇文章我们得知,适配器模式可以细分成三种方式:

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

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

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

这篇文章我们会用具体的场景举例,讲解一下类适配模式

适配器模式使用举例

简单来说,适配器实现了其中一个对象的接口, 并对另一个对象进行封装。

适配器模式通过一个封装对象,将复杂的转换过程隐藏到幕后,对用户来说是透明的。被封装的对象察觉不到适配器的存在。

我们这里以手机充电器为例子进行讲解。我们都知道,中国的标准电压是220V,目前市场上的手机大多数都是快充,我们就假设手机充电器将220V 电压适配为20V 电压来给手机充电,以下我们来对三种适配器模式分别进行举例讲解。

类适配器模式

类适配器模式顾名思义,就是从类的角度来入手的。

首先我们定义一个源头,来代表220V 电压。由于java 不允许多重继承,所以我们将220V 电压定义为一个类:

public class Voltage220V {
  public int getVoltage220V() {
    return 220;
  }
}

然后需要再定义一个目标,代表20V 电压,这里我们使用接口来定义:

public interface Voltage20V {
  int getVoltage20V();
}

最后就轮到我们的主角适配器出厂了,它的作用就是将220V 电压转成20V 的电压:

public class PowerAdapter extends Voltage220V implements Voltage12V {

  @Override
  public int getVoltage12V() {
    return getVoltage220V() / 11;
  }
}

我们可以看出,这个适配器类就是继承了源头类,同时实现了目标类,重写了目标类的方法,最终以目标类希望的接口形式给出结果。这样,就可以达到适配的效果了。

使用:

public static void main(String[] args) {
  PowerAdapter powerAdapter = new PowerAdapter();
  System.out.println(powerAdapter.getVoltage12V());
}

输出:

12

从示例代码中我们可以明显地看出,适配器做的工作就是让目标api 可以按照其现有的方式调用到源头的api,而适配器就是一个中转作用,对原有的类(源头 & 目标)没有任何影响和代码改动。

总结

这篇文章我们使用手机充电器的场景举例,解释了类适配器模式的使用方法,接下来我们会继续介绍另外两种适配器模式。

在我们日常开发中,不要惧怕设计模式的不好理解,反而我们常用的框架中会使用很多设计模式来完成各种各样的功能。所以我们课程积极去大胆去应用和实践,有一些常用的设计模式其实很浅显易懂,但是如果不做学习可能就会很迷惑,所以不要放慢自己的学习脚步,这些基本的知识还是需要融会贯通的。