設計模式探索之適配器模式

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

經過上述例子,咱們完成了對適配器模式的實現。

相關文章
相關標籤/搜索