java学习视频 Java基本数据类型 Appuim环境搭建 HashMap 分布式调度 微信小程序教程 jScroll erp系统源码 jq获取最后一个子元素 oracle创建唯一索引 mac版的matlab好用吗 docker创建容器 python基础 python日期转时间戳 python当前日期 java变量 java基础教学 java运行环境配置 java的for循环 java查看变量类型 java函数调用 内存整理工具 navicat注册机 神剪辑教程 wow怎么赚钱 微信骰子表情包 陌陌电脑直播设置教程 c语言编程实例 正当防卫4存档 相册制作软件 无线网密码修改 jdk9 马哥python 远程桌面管理工具 iosps腹肌 android计算器 情头污系 樱牛在哪 vue上传图片 ps白色背景变透明
当前位置: 首页 > 学习教程  > 编程语言

彻底搞懂设计模式DesignPattern-适配器模式

2020/8/31 15:48:18 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

简介

  1. 适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper)
  2. 适配器模式属于结构型模式
  3. 主要分为三类:类适配器模式、对象适配器模式、接口适配器模式

工作原理

  1. 适配器模式:将一个类的接口转换成另一种接口.让原本接口不兼容的类可以兼容
  2. 从用户的角度看不到被适配者,是解耦的
  3. 用户调用适配器转化出来的目标接口方法,适配器再调用被适配者的相关接口方法
  4. 用户收到反馈结果,感觉只是和目标接口交互,如图

需要被适配的类、接口、对象(我们有的),简称 src(source)
最终需要的输出(我们想要的),简称 dst (destination,即Target)
适配器称之为 Adapter 。

一句话描述适配器模式的感觉: src->Adapter->dst,即src以某种形式(三种形式分别对应三种适配器模式)给到Adapter里,最终转化成了dst。

类适配器模式

  1. Java 是单继承机制,所以类适配器需要继承 src 类这一点算是一个缺点, 因为这要求 dst 必须是接口,有一定局限性;
  2. src 类的方法在 Adapter 中都会暴露出来,也增加了使用的成本。
  3. 由于其继承了 src 类,所以它可以根据需求重写 src 类的方法,使得 Adapter 的灵活性增强了。

对象适配器模式

  1. 基本思路和类的适配器模式相同,只是将 Adapter 类作修改,不是继承 src 类,而是持有 src 类的实例,以解决兼容性的问题。 即:持有 src 类,实现 dst 类接口,完成 src->dst 的适配
  2. 根据“合成复用原则”,在系统中尽量使用关联关系(聚合)来替代继承关系。
  3. 对象适配器模式是适配器模式常用的一种

注意事项

  1. 对象适配器和类适配器其实算是同一种思想,只不过实现方式不同。
    根据合成复用原则,使用组合替代继承, 所以它解决了类适配器必须继承 src 的局限性问题,也不再要求 dst必须是接口。
  2. 使用成本更低,更灵活。

接口适配器模式

  1. 适配器模式(Default Adapter Pattern)或缺省适配器模式。
  2. 核心思路:当不需要全部实现接口提供的方法时,可先设计一个抽象类实现接口,并为该接口中每个方法提供一个默认实现(空方法),那么该抽象类的子类可有选择地覆盖父类的某些方法来实现需求
  3. 适用于一个接口不想使用其所有的方法的情况。

当存在这样一个接口,其中定义了N多的方法,而我们现在却只想使用其中的一个到几个方法,如果我们直接实现接口,那么我们要对所有的方法进行实现,哪怕我们仅仅是对不需要的方法进行置空(只写一对大括号,不做具体方法实现)也会导致这个类变得臃肿,调用也不方便,这时我们可以使用一个抽象类作为中间件,即适配器,用这个抽象类实现接口,而在抽象类中所有的方法都进行置空,那么我们在创建抽象类的继承类,而且重写我们需要使用的那几个方法即可。

代码示例

码云地址https://gitee.com/magneto/codeReview/tree/master/DesignPattern/src/pro51/top/adapter

微信
微信

个人网站
http://www.51pro.top
网站
公众号
公众号


本文链接: http://www.dtmao.cc/news_show_150418.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?