三句话搞定适配器模式

适配器模式的官方定义:

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

适配器模式的大白话:

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

举个例子:

电源的电压是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 条评论
登录 后参与评论

相关文章

来自专栏轮子工厂

设计模式(三) | 为别人做嫁衣---代理模式

9820
来自专栏Android机器圈

Retrofit网络请求库应用02——json解析

PS:上一篇写了Retrofit网络请求库的简单使用,仅仅是获取百度的源码,来证明连接成功,这篇讲解如何解析JSON数据,该框架不再是我们之前自己写的那样用Js...

32760
来自专栏项勇

笔记 34 | java线程之Thread线程优先

18650
来自专栏desperate633

Java并发之“饥饿”和“公平锁”(Starvation and Fairness)java中发生线程饥饿的原因java中实现公平锁公平锁性能考虑

如果一个线程的cpu执行时间都被其他线程抢占了,导致得不到cpu执行,这种情况就叫做“饥饿”,这个线程就会出现饥饿致死的现象,因为永远无法得到cpu的执行。解决...

15610
来自专栏FreeBuf

Android漏洞CVE-2015-3825分析及exploit实战:从Crash到劫持PC

* 本文原创作者: thor@MS509Team,本文属FreeBuf原创奖励计划,未经许可禁止转载 CVE-2015-3825是去年Android系统爆出的高...

34660
来自专栏Flutter入门到实战

实现Android主流网络框架封装,可无缝侵入切换框架

先来描述一下需求,比如说,目前正在用的http请求是Volley,现在发现使用OkHttp来封装一套会更好。又比方说,目前正在用的数据存储方案是OrmLite,...

20220
来自专栏yang0range

关于单例设计模式

2.使用场景:确保某个类有且只有一个对象的常见,避免产生多个对象消耗过多的资源或者某种类型的对象只应该有且只有一个。

25030
来自专栏Android开发经验

从源码梳理Retrofit网络请求过程

14240
来自专栏java一日一条

Java接口回调机制详解

最近在看android fragment与Activity进行数据传递的部分,看到了接口回调的内容,今天来总结一下。

41020
来自专栏Phoenix的Android之旅

Android UI开发利器-DataBinding

简单的说就是它提供了一种数据和UI绑定的方法,UI元素可以自动的根据数据的更新而自动改变。 在没有DataBinding的情况下我们是这么更新视图的, 先通过f...

12530

扫码关注云+社区

领取腾讯云代金券