设计模式探索之适配器模式
2017-11-10 00:00
288 查看
摘要: 适配器模式是将一个接口适配成用户所期待的。使得本来因不兼容而不在一起工作的类可以在一起工作。
下面以一个手机充电的例子来说明适配器模式:<br>
我们有一个手机的数据线,是USB接口的,有一太比较旧的电脑,只有PS2的数据线可以连接,现在我们要通过USB的数据线对手机进行充电(我们只是来模拟一下场景,现实中几乎不存在这种情况),因此,我们需要一个适配器来完成USB数据线和PS2接口的连接工作。<br>
先来了解一下这个场景中的角色:<br>
**目标角色:**需要适配的角色,在这里就是USB数据线。
**源角色:**被适配的角色,PS2接口。
**适配器:**我们需要自己完成的适配USB数据线能够通过PS2接口正常工作的对象。
适配器模式主要有两种:类适配器和对象适配器,这两者主要的不同就是类适配器通过继承来实现,而对象适配器是通过组合来实现的。<br>
对象适配器的实现:<br>
目标接口 (USB接口):<br>
源接口(PS2接口):<br>
源接口的实现类:<br>
USB适配器:
测试类:<br>
运行结果:<br>
上面已经实现了简单的适配器,原理非常简单,当需要对USB接口和PS2接口进行对接的时候,通过创建一个适配器实现了USB接口,即USB接口的子类,来代替USB接口,然后持有PS2接口的引用,在调用USB接口的方法时(USB进行充电的方法),调用PS2对象的方法(PS2进行充电的方法),对调用者是透明的,虽然调用的是USB接口的方法,实际上却执行的PS2接口的方法。完成了二者的适配。<br>
下面我们来通过类适配的方式来实现:<br>
测试类:
运行结果:< br>
其他类不需要改变,只要简单改一下适配器就可以实现,通过继承PS2接口的实现类来完成二者的适配,但是这种方式扩展性不是很好。
通过上述例子,我们完成了对适配器模式的实现。
下面以一个手机充电的例子来说明适配器模式:<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接口的实现类来完成二者的适配,但是这种方式扩展性不是很好。
通过上述例子,我们完成了对适配器模式的实现。
相关文章推荐
- 探索设计模式之----适配器模式
- 设计模式探索——适配器模式
- 设计模式之适配器模式
- java中几种设计模式(单例模式,适配器模式,简单工厂模式)
- c++设计模式之适配器模式
- JavaScript设计模式之适配器模式介绍
- Android中的设计模式-适配器模式
- 设计模式--单例模式,观察者模式,适配器模式
- 设计模式——适配器模式
- 设计模式学习笔记之适配器模式
- 设计模式系列-适配器模式
- Java设计模式之结构型模式-适配器模式(Adapter)
- 设计模式之适配器模式
- 设计模式之适配器模式
- 设计模式之--适配器模式(adapter)
- Java设计模式之适配器模式
- Java设计模式百例 - 适配器模式
- 设计模式——适配器模式(Adapter)
- 探索设计模式之----工厂模式
- 探索设计模式(2):单件模式(Singleton Pattern)