栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java设计模式:适配器模式(类适配器和对象适配器)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java设计模式:适配器模式(类适配器和对象适配器)

文章目录
  • 类适配器
    • 代码
  • 对象适配器
    • 代码

类适配器
  • SDCard 是一个接口,代表了 SD 卡本身具有的功能
  • SDCardImpl 是一个具体的实现类,代表了 SDCard 一种具体的实现形式
  • TFCard 是一个接口,代表了 TF 卡本身具有的功能
  • TFCardImpl 是一个具体的实现类,代表了 TFCard 一种具体的实现形式
  • computer 只有一个读取卡中信息的接口,他必须接受一个 SDCard 类型的参数;也就是说 computer 只能接受 SDCard 中规定的数据规范
  • 但现在想让 computer 读 TFCard 的内容怎么办呢?
  • 那我们就要用 SDAdapterTF 来将 TF 的数据以 SD 卡的规范给到 computer
  • 因此,我们就需要让 SDAdapterTF 继承 TFCardImpl,这一步骤的意义就是他的数据还是 TF 卡中的数据,但是又要让 SDAdapterTF 去实现 SDCard 接口规定的方法,其意义就是让他具有能被 computer 接受的资格。
代码



  • 这样 computer 通过 readSD 中传入一个 SDAdapterTF 就可以读到 TF 卡中的数据了
  • 因为 SDAdapterTF 继承了 TFCardImpl,因此 new SDAdapterTF 相当于 new TFCardImpl
  • 而因为 SDAdapterTF 实现了接口 SDCard,他就可以作为一个 SDCard 被放到 computer 的 readSD() 方法里面
对象适配器

  • 类适配器的问题是:SDAdapterTF 直接继承了 TFCardImpl 这样就导致了,如果 SDCard 不是以 interface 的形式出现,而是一个抽象类或者压根就不存在这个抽象类,而是 SDAdapterTF 需要直接继承 SDCardImpl 或者 SDCard 抽象类,那么由于 java 不能允许多继承,这个时候就没办法再去继承 TFCardImpl 了,因此类适配器本身要求比较苛刻。而对象适配器通过将 TFCard 接口进行聚合,把 TFCard 作为一个属性,进而获得其中的数据同时避免了继承 TFCardImpl;保留了珍贵的 继承 机会,完美地解决了上述问题,也避免了隐患。
代码
  • 只需要修改 SDAdapterTF 的代码和 Client 中的代码即可。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/271694.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号