【注意】最后更新于 December 21, 2017,文中内容可能已过时,请谨慎使用。
本篇来聊一聊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);
|
开始听音乐吧!
完美!
----------------------分割线------------------------
到这个地方就差不多结束了,不过还有个想说的,适配器有常见的几种模式,这个是对象适配器,还有个类适配器,需要继承对象,静态定义,而咱们的对象适配是动态组合,比较灵活。
具体应用的话可以参考安卓的应用,挺多的。
除了这两者,还有个缺省适配模式,就是说有个规范定义的要求太多,但是老子就是老大,我就不都实现,但我就可以说我是!(例如如今的各种全面屏手机)