设计模式 -- 适配器模式

Posted java叶新东老师

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式 -- 适配器模式相关的知识,希望对你有一定的参考价值。

 

适配器的定义

      首先我们先要了解一下什么是适配器,以及适配器能干什么。

下面的这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的转换,才能访问,在适配器里面的逻辑,其实就是把一个类的方法调用转成调另一个类的方法,

 

 

 

 

以上是关于设计模式 -- 适配器模式的主要内容,如果未能解决你的问题,请参考以下文章

多选模式列表视图行在删除后保持选中状态

Java设计模式之适配器模式

设计模式之适配器模式

设计模式之适配器模式

php设计模式之适配器模式实例代码

.NET(C#) 设计模式 适配器模式