下面以一個手機充電的例子來講明適配器模式:<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接口的實現類來完成兩者的適配,可是這種方式擴展性不是很好。
經過上述例子,咱們完成了對適配器模式的實現。