专栏首页闻道于事设计模式之适配器模式

设计模式之适配器模式

适配器模式

适配器就是一种适配中间件,它存在于不匹配的二者之间,用于连接二者,将不匹配变得匹配,简单点理解就是平常所见的转接头,转换器之类的存在。

简单来说,适配器模式就是把一个类的接口变换成客户端所能接受的另一种接口,从而使两个接口不匹配而无法在一起工作的两个类能够在一起工作。

通常被用在一个项目需要引用一些开源框架来一起工作的情况下,这些框架内部都有一些关于环境信息的接口,需要从外部传入,但是外部的接口不一定能匹配,在这种情况下,就需要适配器模式来转换接口。

适配器模式结构:

其中,

Target:所要转换所期待的接口。

Adaptee:需要适配的接口。

Adapter:将源接口适配成目标接口,继承源接口,实现目标接口。

Java I/O中的适配器模式

适配器的作用就是将一个接口适配到另一个接口,在Java的I/O类库中有很多这样的需求,如将字符串数据转变成字节数据保存到文件中,将字节数据转变成流数据等。

InputStreamReader、OutputStreamWriter分别继承了Reader和Writer接口,但是要创建他们的对象必须在构造函数中传入一个InputStream和OutputStream的实例。InputStreamReader和OutputStreamWriter的作用也就是将InputStream和OutputStream适配到Reader和Writer。

InputStreamReader的类结构:

实现了Reader接口,并且持有了InputStream的引用,这里是通过StreamDecoder类间接持有的,因为从byte到char需要经过编码。

在这个过程中,适配器就是InputStreamReader类,源角色就是InputStream代表的实例对象,目标接口就是Reader类。

适配器模式和装饰器模式区别:

装饰器模式和适配器模式都有一个别名就是包装模式,他们都是起到包装一个类或对象的作用。但是他们的目的不同,适配器模式的意义试讲一个接口转变成另一个接口,他的目的之通过改变接口来达到重复使用的目的;而装饰器模式则是要保留原有的接口,但是增强原有对象的功能,或者改变原有对象的处理方法而提升性能。

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 设计模式之装饰器设计模式

    Java的IO流使用了一种装饰器设计模式。它将IO流分成底层节点流和上层处理流,其中节点流用于和底层的物流存储结点直接关联——不同的物流节点获取该结点流的方式可...

    二十三年蝉
  • MyBatis框架(三)动态SQL,分页,二进制存入数据库图片

    一、动态sql语句,分页 1, <if>条件   <if test="key!=null">   拼接sql语句   </if> 2, <ch...

    二十三年蝉
  • Oracle数据库常用命令

    --查询当前系统中的所有用户 select * from all_users --查当前用户下所有的表: select * from tab wher...

    二十三年蝉
  • Python接口自动化之登录接口测试

    通俗来说,接口就是连接前后端的桥梁,接口测试可以简单理解为脱离了前端的功能测试。一个又一个的接口就对应功能测试内一个又一个的功能。但注意,一个功能有可能不是一个...

    ITester软件测试小栈
  • [Go] gocron源码阅读-空接口类型interface{}

    gocron源代码中的Action那个地方,就是个空接口类型Action interface{},可以传递任意类型进去,这里是传了个函数进去

    陶士涵
  • 接口

    我们把对接这个事情想像成我们在手机上点外卖,商家是不是需要我们提供 购买人的手机号,姓名,配送地址,才能把外卖准确的送到我们手里面,在这个流程里面,商家就相当于...

    张琳兮
  • 23种设计模式之适配器模式

    定义: 将一个类的接口变换成客户端所期待的另一种接口, 从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作.

    烟草的香味
  • Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(六)将接口用 webpack 代理到本地

    Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(六)将接口用 webpack 代理到本地 前情回顾 在上一篇博文《Vue...

    FungLeo
  • ElasticSearch(7.2.2)-es之term的多种查询

    cwl_java
  • 《Head First 设计模式》学习心得笔记

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

    剑影啸清寒

扫码关注云+社区

领取腾讯云代金券