-
简介
当我们需要使用某个对象的功能,但是我们没有这个对象时,我们可以用适配器和替换对象来实现这个功能.比如我们手机有typec接口,但是我们没有这个接口的耳机,我们可以用typec转3.5mm的线和耳机和手机连上,我们就可以用3.5mm耳机听到音乐 -
模式应用
-
类图
-
源码实现
点击查看代码
package designpattern.proxy.adapter;
//typc插头的耳机 可以插有typec口的手机
public interface EarphoneTypeCPlug {
public void soundByTypeC();
}
点击查看代码
package designpattern.proxy.adapter;
//3.5插头的耳机 可以插有3.5mm口的未来科技手机
public interface Earphone3_5mmPlug {
public void soundBy3_5mm();
}
这是一个手机,手机可以连上typec插头,可以放音乐
点击查看代码
package designpattern.proxy.adapter;
public class HuaweiPhone {
private EarphoneTypeCPlug earphoneTypeCPlug = null;
//插上TypeCPlug的耳机
public void link(EarphoneTypeCPlug earphoneTypeCPlug) {
this.earphoneTypeCPlug = earphoneTypeCPlug;
}
public void music(){
if(earphoneTypeCPlug!=null){
System.out.println("音乐通过typec耳机在播放");
earphoneTypeCPlug.soundByTypeC();
}else{
System.out.println("手机外发...");
}
}
}
这是3.5mm的耳机
点击查看代码
package designpattern.proxy.adapter;
//3.5mm耳机
public class Earphone3_5mm implements Earphone3_5mmPlug {
@Override
public void soundBy3_5mm() {
System.out.println("这是来自未来科技3.5mm耳机的声音...");
}
}
这是我们的转化线,也就是适配器
点击查看代码
package designpattern.proxy.adapter;
public class AdapterTypeC2_3_5mm implements Earphone3_5mmPlug,EarphoneTypeCPlug{
private Earphone3_5mmPlug plug1;
//插上3.5mm耳机
public void link(Earphone3_5mmPlug plug1) {
this.plug1 = plug1;
}
@Override
public void soundBy3_5mm() {
}
@Override
public void soundByTypeC() {
System.out.println("转接线在工作...");
plug1.soundBy3_5mm();
}
}
现在我们来测试下,耳机能不能正常工作
点击查看代码
package designpattern.proxy.adapter;
public class Client {
public static void main(String[] args) {
//我有一个华为手机
HuaweiPhone phone = new HuaweiPhone();
//我有一副3.5的耳机
Earphone3_5mm earphone3_5mm = new Earphone3_5mm();
//我买了一根转接线
AdapterTypeC2_3_5mm adapterTypeC2_3_5mm = new AdapterTypeC2_3_5mm();
//把耳机插到转接线上
adapterTypeC2_3_5mm.link(earphone3_5mm);
//把转接线插到手机上
phone.link(adapterTypeC2_3_5mm);
//播放音乐
phone.music();
}
}
结果如下