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

类适配器

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

代码

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

对象适配器

在这里插入图片描述

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

代码

  • 只需要修改 SDAdapterTF 的代码和 Client 中的代码即可。
    在这里插入图片描述
    在这里插入图片描述
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暖仔会飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值