本篇来聊一聊java设计模式之适配器模式。

我还记得,之前学习安卓开发的时候,用到各种adapter,一头雾水,这都是些什么啊?完全不懂,当时开发也是懵懵懂懂的。这下要好好学一学。 iPhone大家都没见过吧!牌子货!很厉害!大厂商! 为了手机美观,减少厚度,想着要不把耳机口取消了? 结果开了个先河,带了个坏头。而且手机口还是自己设计的一套模式,不是type-c。 再想用市面上常见的3.5mm耳机口,就不得不买他们的转接线,心机boy! 他们给自己设计了一套规范

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
package top.txiner.adapter;

/**
 * @author : hundred
 * time: 17-12-21
 * website : http://txiner.top
 * 懵懂的小白
 */
public interface iPhone {
    void outputIf();
}

然后发布了iPhone7,说要听音乐必须得按照我的接口来!

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
package top.txiner.adapter;

/**
 * @author : hundred
 * time: 17-12-21
 * website : http://txiner.top
 * 懵懂的小白
 */
public class iPhone7 {

    public void play(iPhone ipIf){
        System.out.println("let's hear some music");
        ipIf.outputIf();
    }
}

然而呢!市面上传统的耳机都是这个样子的!

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
package top.txiner.adapter;

/**
 * @author : hundred
 * time: 17-12-21
 * website : http://txiner.top
 * 懵懂的小白
 */
public interface Earphone {
    void output();
}

而且,一大厂家--beats发型了很好的耳机

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
package top.txiner.adapter;

/**
 * @author : hundred
 * time: 17-12-21
 * website : http://txiner.top
 * 懵懂的小白
 */
public class Beats implements Earphone {
    @Override
    public void output() {
        System.out.println("a wonderful experience");
    }
}

恩,我想用来听歌啊!先买个Iphone7

1
iPhone7 ip7=new iPhone7();

再买个beats耳机

1
Earphone beats=new Beats();

不行啊!我想播放播放不了啊!需要接口,可是接口不对! 买转接线吧! 我这个转接线肯定得有两个口,一个是得对着耳机,一个是得兼容iPhone的口! 也就是说,我得把所有iPone的规范实现了,才能播放音乐!

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
package top.txiner.adapter;

/**
 * @author : hundred
 * time: 17-12-21
 * website : http://txiner.top
 * 懵懂的小白
 */
public class Usb2Earphone implements iPhone {
    private Earphone earphone;

    public Usb2Earphone(Earphone earphone) {
        this.earphone = earphone;
    }

    @Override
    public void outputIf() {
        System.out.println("convert earphone to usb");
        this.earphone.output();
    }
}

这样,你看,我用转接线的时候,把耳机插进去,然后去实现iPhone的接口,不就完事大吉了? 好了,我们买好了转换器,耳机也插进去了

1
Usb2Earphone usbIf=new Usb2Earphone(beats);

开始听音乐吧!

1
ip7.play(usbIf);

完美! ----------------------分割线------------------------ 到这个地方就差不多结束了,不过还有个想说的,适配器有常见的几种模式,这个是对象适配器,还有个类适配器,需要继承对象,静态定义,而咱们的对象适配是动态组合,比较灵活。 具体应用的话可以参考安卓的应用,挺多的。 除了这两者,还有个缺省适配模式,就是说有个规范定义的要求太多,但是老子就是老大,我就不都实现,但我就可以说我是!(例如如今的各种全面屏手机)