文档章节

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

learn_more
 learn_more
发布于 2015/06/15 09:01
字数 1062
阅读 133
收藏 10
点赞 0
评论 0

背景

    不要再问程序员谈女票的事情了,我都说过很多次了,上次相亲又给话了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
粉丝 90
博文 240
码字总数 210196
作品 0
深圳
程序员
迈向大牛的重要一步——掌握设计模式

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

一枚Sir
2015/04/10
0
0
C#设计模式(2)——简单工厂模式

一、引言   这个系列也是自己对设计模式的一些学习笔记,希望对一些初学设计模式的人有所帮助的,在上一个专题中介绍了单例模式,在这个专题中继续为大家介绍一个比较容易理解的模式——简单工...

技术小胖子
2017/11/08
0
0
小菜学设计模式——抽象工厂模式

背景 简单工厂、工厂方法模式,接着必须学习抽象工厂模式 1、使用意图 扩展工厂方法模式 2、生活实例 淘宝电影、猫眼电影都能为我们生成当天各种电影票 3、Java 例子(框架、JDK 、JEE) 个人...

learn_more
2015/06/13
0
0
Java 设计模式(14) —— 复合模式

一、复合模式 模式常一起使用,组合在一个设计解决方案中 复合模式在一个解决方案中结合两个或多个模式,能解决一般性或一系列的问题 二、示例 本次设计模式讲解中无代码示例,由于复合模式是...

磊_lei
05/26
0
0
JavaScript设计模式之观察者模式

前言 准备研究一下MVVM的一些东西,由于MVVM运用了观察者模式的思想,因此翻开了《JavaScript设计模式与开发实践》一书,将观察者模式学习了一遍,顺便有对一些常用的设计模式进行一些了解,...

Srtian
05/22
0
0
Java设计模式之抽象工厂模式

抽象工厂模式特点 抽象工厂模式与工厂模式最大的区别是每个单独的产品是一个工厂模式,而多个不同产品交互则是抽象工厂模式,抽象工厂模式通常要运用工厂模式的方法。通常,工厂模式的所有产...

断桥残雪断桥残雪
2015/08/09
0
0
小菜学设计模式——工厂方法模式

背景 简单工厂模式最大的优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关类,对于客户端来说,去除了与具体产品的依赖。如果,项目需要扩展,新增一种产品需要简...

learn_more
2015/06/07
0
0
设计模式什么的哪有那么神秘 ----第一集 一些吐槽和重构的韵味

一日面试, ...... Hr:你对设计模式熟悉吗? 应聘者A:我了解常用的设计模式,平时经常使用工厂模式和单例模式.而且我也看过一些讲23种设计模式的书.其他不常用的模式用的不是太熟. Hr:你用过外观...

架构梦想
2013/08/04
0
7
小菜学设计模式——设计模式总结之结构型

1、设计模式总结 设计模式总共23个,但是常用的不到10个,下面就把这23个设计模式进行整理归类,具体如下: 1)创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型...

learn_more
2015/07/06
0
0
javascript 设计模式之工厂(Factory)模式

工厂模式介绍 工厂模式是一个创建型的模式,主要就是创建对象。其中工厂模式又分为简单工厂模式和抽象工厂模式。简单工厂模式是通过工厂方法确定创建 对应类型的对象。抽象工厂模式是通过子类...

hlxiong
2014/04/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring Boot Admin 2.0开箱体验

概述 在我之前的 《Spring Boot应用监控实战》 一文中,讲述了如何利用 Spring Boot Admin 1.5.X 版本来可视化地监控 Spring Boot 应用。说时迟,那时快,现在 Spring Boot Admin 都更新到 ...

CodeSheep
16分钟前
0
0
Python + Selenium + Chrome 使用代理 auth 的用户名密码授权

米扑代理,全球领导的代理品牌,专注代理行业近十年,提供开放、私密、独享代理,并可免费试用 米扑代理官网:https://proxy.mimvp.com 本文示例,是结合米扑代理的私密、独享、开放代理,专...

sunboy2050
59分钟前
0
0
实现异步有哪些方法

有哪些方法可以实现异步呢? 方式一:java 线程池 示例: @Test public final void test_ThreadPool() throws InterruptedException { ScheduledThreadPoolExecutor scheduledThre......

黄威
今天
1
0
linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

六库科技
今天
0
0
牛客网刷题

1. 二维数组中的查找(难度:易) 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入...

大不了敲一辈子代码
今天
0
0
linux系统的任务计划、服务管理

linux任务计划cron 在linux下,有时候要在我们不在的时候执行一项命令,或启动一个脚本,可以使用任务计划cron功能。 任务计划要用crontab命令完成 选项: -u 指定某个用户,不加-u表示当前用...

黄昏残影
昨天
0
0
设计模式:单例模式

单例模式的定义是确保某个类在任何情况下都只有一个实例,并且需要提供一个全局的访问点供调用者访问该实例的一种模式。 实现以上模式基于以下必须遵守的两点: 1.构造方法私有化 2.提供一个...

人觉非常君
昨天
0
0
《Linux Perf Master》Edition 0.4 发布

在线阅读:https://riboseyim.gitbook.io/perf 在线阅读:https://www.gitbook.com/book/riboseyim/linux-perf-master/details 百度网盘【pdf、mobi、ePub】:https://pan.baidu.com/s/1C20T......

RiboseYim
昨天
1
0
conda 换源

https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/conda config --add channels https://mir......

阿豪boy
昨天
1
0
Confluence 6 安装补丁类文件

Atlassian 支持或者 Atlassian 缺陷修复小组可能针对有一些关键问题会提供补丁来解决这些问题,但是这些问题还没有放到下一个更新版本中。这些问题将会使用 Class 类文件同时在官方 Jira bug...

honeymose
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部