适配器的定义
首先我们先要了解一下什么是适配器,以及适配器能干什么。
下面的这2个东东大家都见过吧?是不是人手一个,不对,是每人都有好几个;这个东东就叫做电源适配器,在这个电源的内部经过了一层转换,把 市电220V(单位:伏)的交流电 转为手机能识别的 5V(单位:伏)直流电 ;
我们在来看看下面这个东东,都见过吧,没错了,这就是type-c转耳机接口,因为我们的耳机大多都是3.5毫米直径的圆孔插口,但是现在大多手机都没这个接口了,所以要用耳机就得经过一层转换;
当然了,还有下面的这些东东都叫适配器;也叫转接器、转换器都可以;
适配器流程
说白了。适配器就是起到一个转换的作用,那么在程序的层面是如何转换的呢? 我们先看看转换过程的流程图
如图所示,客户是不能直接访问 B 的。Adapter是适配器,它将 B 转换成 客户 能访问的接口。所以通过适配器 Adapter ,客户端就可以访问 B 了。
接下来,我们模拟一个适配器,中国的电源是220V的,日本的电源是110V的,所以日本的电器也是110V的,那么如果想要在中国使用日本的电器,就必须把中国的220V电源转为110V,才可使用日本电器,转换过程如下
用适配器的流程图来表示的话,就是这样的
用代码模式适配器模式
- package com.designPatterm.adapter;
-
- /**
- * 适配器模式
- */
- public class AdapterTest {
-
- public static void main(String[] args) {
- ChinaPower220V chinaPower = new ChinaPower220VImpl();
-
- // JapanElectric japanElectric = new JapanElectric(chinaPower); // 日本电器无法直接使用中国电源
- // 适配器初始化,将22v的电源传入适配器,在里面做转化
- AdapterPower adapterPower = new AdapterPower(chinaPower);
- // 日本电器使用转换后的适配器
- JapanElectric japanElectric = new JapanElectric(adapterPower);
- // 使用日本电器
- japanElectric.use();
- }
- }
-
- // 中国电源
- interface ChinaPower220V{
- // 使用电源
- void connect();
- }
- // 中国电源实现类
- class ChinaPower220VImpl implements ChinaPower220V{
-
- @Override
- public void connect() {
- System.out.println("使用中国电源 220V");
- }
- }
-
- // 日本电源
- interface JapanPower110V{
- void connect();
- }
- //日本电源实现类
- class JapanPower110VImpl implements JapanPower110V{
- @Override
- public void connect() {
- System.out.println("使用日本电源 110V");
- }
- }
-
- // 日本电器---这里也可以写成接口的形式,为了方便易读,就不写接口了
- class JapanElectric{
-
- private JapanPower110V japanPower110V;
-
- public JapanElectric(JapanPower110V japanPower110V){
- this.japanPower110V = japanPower110V;
- }
- // 使用日本电器
- void use(){
- // 这里用的是适配器类的connect方法,而适配器里面又用了中国电源的connect方法,属于间接使用中国电源,所以这里用的是中国电源的connect;
- japanPower110V.connect();
- convert();
- System.out.println("使用日本电器");
- }
- //转换电源的方法
- private void convert(){
- System.out.println("转换为110V电源");
- }
- }
-
- //电源适配器
- class AdapterPower implements JapanPower110V{
-
- private ChinaPower220V chinaPower220V;
- public AdapterPower(ChinaPower220V chinaPower220V){
- this.chinaPower220V = chinaPower220V;
- }
-
- @Override
- public void connect() {
- chinaPower220V.connect();
- }
- }
这个设计模式理解起来还是有些绕,对于一般人来说,太抽象了,但是我们只要知道适配是做转换的就行了,通俗点说的话,比如有A、B、C 三个类,A想要调用C就必须先经过B的转换,才能访问,在适配器里面的逻辑,其实就是把一个类的方法调用转成调另一个类的方法,