下面以一个手机充电的例子来讲明适配器模式:<br> 咱们有一个手机的数据线,是USB接口的,有一太比较旧的电脑,只有PS2的数据线能够链接,如今咱们要经过USB的数据线对手机进行充电(咱们只是来模拟一下场景,现实中几乎不存在这种状况),所以,咱们须要一个适配器来完成USB数据线和PS2接口的链接工做。<br> 先来了解一下这个场景中的角色:<br> **目标角色:**须要适配的角色,在这里就是USB数据线。 **源角色:**被适配的角色,PS2接口。 **适配器:**咱们须要本身完成的适配USB数据线可以经过PS2接口正常工做的对象。ide
适配器模式主要有两种:类适配器和对象适配器,这二者主要的不一样就是类适配器经过继承来实现,而对象适配器是经过组合来实现的。<br>测试
对象适配器的实现:<br>this
目标接口 (USB接口):<br>code
public interface USB { void chargeWithUsb(); }
源接口(PS2接口):<br>对象
public interface PS2 { void chargeWithPS2(); }
源接口的实现类:<br>继承
public class PS2Charger implements PS2 { @Override public void chargeWithPS2() { System.out.println("使用PS2接口进行充电..."); } }
USB适配器:接口
public class USBAdapter implements USB { private PS2 ps2; public USBAdapter(PS2 ps2) { this.ps2 = ps2; } @Override public void chargeWithUsb() { System.out.println("我是USB接口的手机。。。"); ps2.chargeWithPS2(); } }
测试类:<br>it
public static void main(String[] args) { PS2Charger ps2Charger = new PS2Charger(); USB adapter = new USBAdapter(ps2Charger); adapter.chargeWithUsb(); }
运行结果:<br>class
我是USB接口的手机。。。 使用PS2接口进行充电...
上面已经实现了简单的适配器,原理很是简单,当须要对USB接口和PS2接口进行对接的时候,经过建立一个适配器实现了USB接口,即USB接口的子类,来代替USB接口,而后持有PS2接口的引用,在调用USB接口的方法时(USB进行充电的方法),调用PS2对象的方法(PS2进行充电的方法),对调用者是透明的,虽然调用的是USB接口的方法,实际上却执行的PS2接口的方法。完成了两者的适配。<br> 下面咱们来经过类适配的方式来实现:<br>原理
public class USBAdapter extends PS2Charger implements USB { @Override public void chargeWithUsb() { System.out.println("个人手机接口是USB"); this.chargeWithPS2(); } }
测试类:
public class Main { public static void main(String[] args) { USB usb = new PS2Adapter(); usb.chargeWithUsb(); } }
运行结果:< br>
个人手机接口是USB 使用PS2接口进行充电...
其余类不须要改变,只要简单改一下适配器就能够实现,经过继承PS2接口的实现类来完成两者的适配,可是这种方式扩展性不是很好。
经过上述例子,咱们完成了对适配器模式的实现。