您的位置:首页 > 其它

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

2017-11-10 00:00 288 查看
摘要: 适配器模式是将一个接口适配成用户所期待的。使得本来因不兼容而不在一起工作的类可以在一起工作。

下面以一个手机充电的例子来说明适配器模式:<br>
我们有一个手机的数据线,是USB接口的,有一太比较旧的电脑,只有PS2的数据线可以连接,现在我们要通过USB的数据线对手机进行充电(我们只是来模拟一下场景,现实中几乎不存在这种情况),因此,我们需要一个适配器来完成USB数据线和PS2接口的连接工作。<br>
先来了解一下这个场景中的角色:<br>
**目标角色:**需要适配的角色,在这里就是USB数据线。
**源角色:**被适配的角色,PS2接口。
**适配器:**我们需要自己完成的适配USB数据线能够通过PS2接口正常工作的对象。

适配器模式主要有两种:类适配器和对象适配器,这两者主要的不同就是类适配器通过继承来实现,而对象适配器是通过组合来实现的。<br>

对象适配器的实现:<br>

目标接口 (USB接口):<br>

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>

public static void main(String[] args) {

PS2Charger ps2Charger = new PS2Charger();

USB adapter = new USBAdapter(ps2Charger);

adapter.chargeWithUsb();

}

运行结果:<br>

我是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接口的实现类来完成二者的适配,但是这种方式扩展性不是很好。

通过上述例子,我们完成了对适配器模式的实现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  适配器模式