Java设计模式---适配器模式

举个老栗子

插两个孔的插头怎么能插入三个孔的插座呢,,这肯定都知道,中间加个转接头。
一头被两个孔的插一头插入三个孔的插座就可以了。。 那么 这个转接头就是个适配器了。。。。


u=2292860942,612161708&fm=26&gp=0.jpg

下面通过代码来展示一下这个逻辑:

先是三孔插座:

/**
 * 三孔插座
 */
public class ThreeHoleSocket {
    private ThreeHolePlug threeHolePlug;

    public ThreeHoleSocket(ThreeHolePlug threeHolePlug){
        this.threeHolePlug = threeHolePlug;
    }

    /**
     * 充电
     */
    public void charge(){
        if(threeHolePlug != null){
            threeHolePlug.insert();
        }else{
            System.out.println("插头未插入");
        }
    }
}

三孔插座要插入一个三孔的插头才能进行充电,只要是三孔的不管什么电器都可以,所以我们有一个三孔插头节接口:

public interface ThreeHolePlug {
    void insert();
}

这个接口里有个插入方法,就是用来插入三孔插座的。
接下来就是一个两孔插头了:

/**
 * 两孔插头
 */
public class TwoHolePlug {

    public void charge(){
        System.out.println("两孔插头--充电中");
    }
}

两孔插头也有一个充电的方法,但得要插入才能充电,现在三孔插座需要的是一个三孔类型的插座,但这个两孔的是不能够插进去的,这可怎么办。。。。。。。
这个时候就得来个转接头适配器了,先看看代码:

/**
 * 一面三孔一面两孔适配器
 */
public class ThreeHoleAdapter implements ThreeHolePlug{

    private TwoHolePlug twoHolePlug;

    public ThreeHoleAdapter(TwoHolePlug twoHolePlug){
        this.twoHolePlug = twoHolePlug;
    }
    /**
     * 插入
     */
    @Override
    public void insert() {
        twoHolePlug.charge();
    }
}

这个适配器实现了三孔插头方法,所以他是可以插入三孔插座的,现在这个适配器传进来一个两孔插头,就相当于两孔插头插入了这个适配器,只要等这个适配器再插入三孔插座,就可以充上电了,
下面看看咋充的电:

 TwoHolePlug twoHolePlug = new TwoHolePlug();
        //两孔插头插入适配器
        ThreeHoleAdapter threeHoleAdapter = new ThreeHoleAdapter(twoHolePlug);
        //适配器插入三孔插座
        ThreeHoleSocket threeHoleSocket = new ThreeHoleSocket(threeHoleAdapter);
        //开始充电
        threeHoleSocket.charge();

运行后:


QQ截图20200324211829.png

可以看到,两孔的插头成功插入并充上电了。。。

尤记得以前面试被问到适配器模式,脑子一热,心里想着一大堆,嘴上却在阿巴阿巴阿巴阿巴阿巴


u=4231373203,681615851&fm=111&gp=0.jpg

希望写过一遍能长点记性!!!

你可能感兴趣的:(Java设计模式---适配器模式)