持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天,点击查看活动详情
通过上一篇文章我们得知,适配器模式可以细分成三种方式:
- 类适配器模式
- 对象适配器模式
- 接口适配器模式
同时适配器有三个角色,分别是:源头、适配器、目标。
适配器要做的事情就是通过适配器类将源头适配为目标。
这篇文章我们会用具体的场景举例,讲解一下类适配模式。
适配器模式使用举例
简单来说,适配器实现了其中一个对象的接口, 并对另一个对象进行封装。
适配器模式通过一个封装对象,将复杂的转换过程隐藏到幕后,对用户来说是透明的。被封装的对象察觉不到适配器的存在。
我们这里以手机充电器为例子进行讲解。我们都知道,中国的标准电压是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,而适配器就是一个中转作用,对原有的类(源头 & 目标)没有任何影响和代码改动。
总结
这篇文章我们使用手机充电器的场景举例,解释了类适配器模式的使用方法,接下来我们会继续介绍另外两种适配器模式。
在我们日常开发中,不要惧怕设计模式的不好理解,反而我们常用的框架中会使用很多设计模式来完成各种各样的功能。所以我们课程积极去大胆去应用和实践,有一些常用的设计模式其实很浅显易懂,但是如果不做学习可能就会很迷惑,所以不要放慢自己的学习脚步,这些基本的知识还是需要融会贯通的。