设计模式探索之适配器模式

下面以一个手机充电的例子来讲明适配器模式:<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接口的实现类来完成两者的适配,可是这种方式扩展性不是很好。

经过上述例子,咱们完成了对适配器模式的实现。

相关文章
相关标签/搜索