三句话搞定适配器模式

适配器模式的官方定义:

将一个与当前类无法兼容的接口转换成能够兼容当前类的接口。

适配器模式的大白话:

现在有一个第三方类/我们项目组中别人写的类放在我们面前,我们需要调用其中的功能,但是第三方类提供给我们的接口和我们程序的接口不相匹配,这时我们就需要再写一个适配器类,把第三方类不匹配的接口转换成能被我们程序调用的接口。

举个例子:

电源的电压是220V,而我们的笔记本需要的电压一般只要十几V,因此就需要一个电源适配器就将电源中220V的电压转换成笔记本所使用的电压。这个电源适配器就采用了适配器模式的思想。

电源就相当于需要被适配的类,笔记本就相当于调用接口的类,电源适配器就相当于适配器类。

适配器模式类图:

1.用户Client想调用Adaptee类中的一些功能,但发现接口与自己定义的接口不一致;

2.此时Client按照自己原本的要求将所需要的功能都写入接口Target中;

3.然后适配器类Adapter实现这个接口;

4.Adapter类必须要使Adaptee作为它的成员变量;

5.Adapter类在实现request函数时,通过成员变量Adaptee来调用Adaptee中specificRequest函数,从而实现了将Adaptee中的功能向Target所需的接口名字转化的过程。

6.Client只需要:

Target target = new Adapter();

target.request();

此时Client仍然调用自己规定的接口request(),但执行的已经是Adaptee中的specificRequest()的功能了。

何时使用适配器模式?

1.在软件开发后期或是开发结束之后,被调用的一些接口需要换掉,为了不需改已经开发好的代码,可以增加一个适配器,起到连接新接口和旧调用的桥梁。

PS:一般在软件设计、开发过程中,如果发现需要调用的接口和原本定义的接口不匹配,应尽量选择重构接口,而不是使用适配器作为转换。

2.在软件开发过程中,需要调用第三方类库的时候,如果第三方类库提供的接口和我们设计的接口不一致,此时可以使用适配器模式,将第三方类库的接口转换成我们所需要的接口。

总之一句话:在接口的调用和被调用双方都不太容易修改的时候再使用适配器模式。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AILearning

Apache Zeppelin 中 Python 2&3解释器

配置 属性 默认 描述 zeppelin.python python 已经安装的Python二进制文件的路径(可以是p...

2457
来自专栏Gaussic

使用 Spring HATEOAS 开发 REST 服务

原文地址:http://www.ibm.com/developerworks/cn/java/j-lo-SpringHATEOAS/

742
来自专栏码匠的流水账

java9迁移注意事项

1、代码不模块化,先迁移到jdk9上,好利用jdk9的api 2、代码同时也模块化迁移

461
来自专栏张善友的专栏

ASP.NET MVC 4中的单页面应用程序

ASP.NET MVC 4 beta中包含了一个实验项目,用作开发“单页面应用程序(single page applications)”。该项目也称为ASP.N...

1807
来自专栏iOS122-移动混合开发研究院

iOS程序猿如何快速掌握 PHP,化身"全栈攻城狮"?

这是一篇以 iOS 开发人员的视角写给广大iOS 程序猿的 PHP 入门指南.在这篇文章里我努力去发掘 objectiv-c 与 php 之间的共性,来帮助有一...

2047
来自专栏Jackson0714

不惧面试:HTTP协议(3) - Cookie

25710
来自专栏编程

tornado全面剖析与实践系列1

猿助猿的技术栈是基于Tornado的, 在学习的过程中参考了很多文章, 但是内容大都碎片化, 缺少系统性讲解, 而且不少关于异步应用的内容还是基于过时的旧版本....

2569
来自专栏hotqin888的专栏

ONLYOFFICE历史版本功能的开发技术之一

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/det...

532
来自专栏博客园

深入浅出话命令

WPF为我们准备了完善的命令系统,你可能会问:“有了路由事件为什么还需要命令系统呢?”。事件的作用是发布、传播一些消息,消息传达到了接收者,事件的指令也就算完成...

724
来自专栏大史住在大前端

大前端的自动化工厂(3)—— babel

babel是ES6+语法的编译器,官方网址:www.babeljs.io,用于将旧版本浏览器无法识别的语法和特性转换成为ES5语法,使代码能够适用更多环境。

1143

扫描关注云+社区