设计模式之适配器模式

来源:互联网 发布:网络执法官破解版 编辑:程序博客网 时间:2024/05/22 04:10

适配器模式,这个设计模式很好理解,因为在生活中实在是太常见了。比如电源适配器,插座提供一个220v的电压,而我的电脑用19v的电压,arm用5v的电压。如果目标很少,电源可以给你定制一个电压,但当需求电压很多的时候就没办法去提供各种各样的需求了,此时电源适配器就派上用场了,通过一个适配,轻松获取需求的电压。类似的还有翻译,比如某个网站提供的是通用的英语原文,而用户只懂中文,就需要一个翻译官充当适配器的作用去做适配。

适配器模式,在我们的学习过程中,处处可见,比如C++的stack/queue就是所谓的适配器容器,用户有很多这样的需求,有一个双端队列提供了这个功能,但接口并不是用户想要的接口,通过stack这种适配器去做相应的转换就可以了。在android中,适配器就更常见了,比如listview上需要各种数据,但是这些数据本身并没有提供对应的接口,所以需要各种适配器去封装这些数据,然后供listview使用。


前面大概说了下应用,下面说点适配器中的角色(仅以电源适配器为例:

(1)目标Target: arm,arm运行需要5v的电压;

(2)待适配的类Adaptee(源类):可以提供220v的电压,并不能满足目标的需求;

(3)适配器(Adapter):电源适配器,将220v的电压转换成5v的电压。


适配器分为类适配器模式和对象适配器模式,可以将一个系统的接口和本来不相容 的另一个系统的类联系起来,从而使得这两个雷能够一起工作,强调了对接口的转换。


UML还是自己画吧,我太懒了,自己手画的。。。


----------------------------------------------------------------------------------

下面讲讲实现的源码,JAVA:

待适配的源类:

//PowerSouce.javapackage org.uestc.adapter;public class PowerSource {private int voltage;public void SetDianya(int v) { voltage = v;System.out.println("我提供的电压是:"+voltage);}public int GetVoltage() {return voltage;}}

适配器:

//Adapter.javapackage org.uestc.adapter;import org.uestc.adapter.PowerSource;;public class Adapter {private PowerSource powerSource;public Adapter(PowerSource powerSource) {this.powerSource = powerSource;}public int voltageSwitch() {int intpuDianya = powerSource.GetVoltage();System.out.println("现在开始进行电压转换.....");int outputDianya = 5;return outputDianya;}}

目标类:

//Arm.javapackage org.uestc.adapter;public class Arm {private int voltage;public void inputDianya(int v) { voltage = v;}public void run() {if(voltage== 5) {System.out.println("arm正常运行");} else {System.out.println("输入电压不正常不能开机运行");}}}

客户端测试:

//client.javapackage org.uestc.adapter;import org.uestc.adapter.PowerSource;;public class Client {public static void main(String []args) {PowerSource powerSource = new PowerSource();powerSource.SetDianya(220);Adapter adapter = new Adapter(powerSource);Arm arm = new Arm();arm.inputDianya(adapter.voltageSwitch());arm.run();}}

运行结果:

我提供的电压是:220现在开始进行电压转换arm正常运行


PS:

参考帖子:点击打开链接


0 0
原创粉丝点击