文档章节

小菜学设计模式——适配器模式

learn_more
 learn_more
发布于 2015/06/15 09:01
字数 1062
阅读 136
收藏 10

背景

    不要再问程序员谈女票的事情了,我都说过很多次了,上次相亲又给话了500元钱,关键是这钱不是花给了对方,而是花在了臭红娘身上了。额,事情是这样的,你找女票,她找男票,但是你也知道,女孩子害羞,男程序员一样害羞,所以找了一个红娘搭一个适配,帮助我们相互了解对方,这里就是一个经典的适配器模式!


1、使用意图

    如果能事先预防接口不同的问题,不匹配问题就不会发生;有一个小接口不统一问题发生时,就及时重构,问题不至于扩大;只有碰到无法改变原有设计和代码的情况时,才考虑使用适配器,那么使用适配器的目的就是适配一些客户端不能直接使用的接口,实质是一种亡羊补牢。


2、生活实例

    姚明找翻译打比赛,翻译就是一个沟通的适配


3、Java 例子(框架、JDK 、JEE)

    适配器模式的出现是因为原有接口不能很好的对接才出现的,JDK中也有很多,比如接口适配,所有实现接口的类都必须要实现接口的所有方法,如果采用适配器模式,用一个抽象类(Adapter),去空实现非必须接口的方法,然后我们就只需要实现抽象类的抽象方法就好。


4、模式类图

  1. 目标抽象角色(Target):定义特定领域的接口,客户端能够使用的角色

  2. 适配源(Adaptee):也称之为被适配者。它是最终的目标,客户本来就是想要使用Adaptee,但是不能直接调用。

  3. 适配器(Adapter):也称之为转换器。客户想要通过目标抽象角色这个接口对象来调用适配源的方法,因为适配源和目标抽象角色根本就不存在关系,所以要用适配器进行转换,但不向客户公布。那么适配器有两种选择:  其一是他可以实现目标抽象角色并且继承适配源,在实现接口中的方法的时候直接调用他继承适配源的方法就可以到达目的。其二是他可以实现目标抽象角色,并且含有适配源对象的引用,那么在实现接口的方法的时候直接通过适配源对象调用他的方法就可以到达目的。

  4. 客户(Client):通过运用适配器对象完成他想要完成的目的,Target t =  new Adapter(); 在Adapter内部调用Adaptee的真正方法。


5、模式优点 

   适配器模式:将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。    系统的数据和行为都正确,但接口不符合对接时,我们应该考虑使用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配。适配器模式主要用于希望复用一些现存的类,但是接口有与复用环境要求不一致的情况。


6、与类似模式比较

    适配器的出现是为了弥补接口对接的问题,如果能够在设计之初避免接口对接问题,那么就没必要使用适配器模式,所以能够尽量不使用适配器模式那是最好的选择;但是,我们经常会使用第三方的SDK进行开发,由于他们和我们的的编码习惯稍有差异,导致接口定义也会有些差距,这个时候我们不可能为了适应别人而去调整自己,而是采用中间适配模式进行对接。    




© 著作权归作者所有

共有 人打赏支持
learn_more
粉丝 92
博文 240
码字总数 210196
作品 0
深圳
程序员
私信 提问
迈向大牛的重要一步——掌握设计模式

IT职场的小菜经常有这样的疑问: 为什么一个相似的功能,大牛一会儿就搞定,然后悠闲地品着下午茶逛淘宝;而自己加班加点搞到天亮还做不完。 为什么用户提出需求变更后,大牛只需潇洒地敲敲键...

一枚Sir
2015/04/10
0
0
《JavaScript设计模式与开发实践》原则篇(2)—— 最少知识原则

最少知识原则(LKP)说的是一个软件实体应当尽可能少地与其他实体发生相互作用。这 里的软件实体是一个广义的概念,不仅包括对象,还包括系统、类、模块、函数、变量等。 单一职责原则指导我们...

嗨呀豆豆呢
2018/12/30
0
0
设计模式已经陨落了?

你现在是坐在一个程序员旁边吗?如果是的话,那么在你读下面的段落之前,有一个简单的实验。让他们到一边去,问问他们两个问题并记录下答案。首先问他们“什么是设计模式?”然后再问“说出你...

oschina
2014/03/11
9.1K
69
《JavaScript设计模式与开发实践》最全知识点汇总大全

系列文章: 《JavaScript设计模式与开发实践》基础篇(1)—— this、call 和 apply 《JavaScript设计模式与开发实践》基础篇(2)—— 闭包和高阶函数 《JavaScript设计模式与开发实践》模式...

嗨呀豆豆呢
01/04
0
0
编程中的那些套路——关于策略模式

该文章属于《编程中的那些经典套路——设计模式汇总》系列,并且以下内容基于语言PHP 今天讲讲策略模式,策略模式 和工厂模式十分相像(或者说在代码逻辑层面,他们是一样的)。 但策略模式与...

gzchen
2018/08/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

解决各浏览器向url中传中问参数的问题

https://www.cnblogs.com/godtrue/p/4333262.html 后台的处理代码 public static String getUrlnewName( String oldName) {String newName = "";try {String agent = inv.get......

踏破铁鞋无觅处
7分钟前
0
0
微信支付携带证书请求

package utils.wechat; import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.security.KeyStore; import javax.net.ssl.SSLContext;......

猿神出窍
15分钟前
0
0
1093 - You can't specify target table 'xxx' for update in FROM clause, Time: 0.002000s

1093 - You can't specify target table 'xxx' for update in FROM clause, Time: 0.002000s 根据结果集在b_order_copy1 表中删除 DELETE FROM b_order_copy1 WHERE Id in ( SELECT Id FRO......

lwenhao
15分钟前
0
0
JavaScriptCore全面解析

本文由云+社区发表 作者:殷源,专注移动客户端开发,微软Imagine Cup中国区特等奖获得者 JavaScript越来越多地出现在我们客户端开发的视野中,从ReactNative到JSpatch,JavaScript与客户端相...

腾讯云加社区
19分钟前
0
0
Jmeter参数的AES加密使用

在Jmeter日常实践中,大家应该都遇到过接口传参需要加密的情况。以登陆为例,用户名和密码一般都需要进行加密传输,在服务端再进行解密,这样安全系数会更高,但在使用jmeter进行接口测试的时...

程序猿拿Q
30分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部