奇发28网

首页 > IT职业 > IT职场 > 适配器模式:如何让不兼容的接口变得兼容

适配器模式:如何让不兼容的接口变得兼容

IT职场 作者:带你聊技术 时间:2023-09-06 09:19:55 0 删除 编辑
作者来源:生活助理   奇发28网
网址:http://www.cibkglfj.cn/a/cs.365128.com/

语音朗读:

          重点推荐:最权威的网页游戏排行

            特色说明页游行业最全,想玩的都有近千款网页游戏一网打尽,没有找不到,只有玩不够。巧妙的谜题设计,华丽而完美的视觉图形,会使你沉浸在幻想风格工业世界中。具有超强穿透力的查询功能,使您可以追溯到(发)生过的任何一笔业务,安装后马上可以开始使用,是一款即装即用的软件。

            i宝健app新版介绍1、提供移动办公体验2、轻松对市场行情信息进行了解3、为你带来不错的推广优惠服务软件功能1、公告:市场活动、产品资讯等信息随时接收2、工作台:业务数据查询、销售队伍动态随手查看3、我的:个人基本信息、分享码、发票信息等一手掌握4、提醒:新人加入、优惠券、旅游资格等信息及时通知更新日志更新内容:修复已知问题,提升用户体验更新内容:1,优化个人信息/业绩查询/抵扣券等功能;2,修复已知问题,提升用户操作体验。关卡探索,抵抗僵尸获得资源,末日生存的必经之路!末世之塔,层层突破挑战守关怪物!,一条没有后退的路,失败即是死亡!神秘水晶,伙伴改造,幸运转盘等精彩内容等你体验!【通力合作的公会】与志同道合的玩家一起组建最强公会!挑战强力的公会boss!领取丰厚奖励。

            更新内容1.新增了备孕新手引导,备孕小白不知道怎么备孕,看这里就够了~2.提供备孕工具库,让好孕率蹭蹭上涨!当出现光盘引导菜单后,根据选择实际光驱模式安装。

            可玩性:游戏中包括3种模式,50个独特的关卡需要你根据过关进度,所花费的时间和步数来收集星星,逐渐解锁。BlueStacks首创让用户可以在模拟器上同时运行多个应用,比如一边玩游戏、一边开刷,互不耽搁。

          最权威的网页游戏排行

          来源:waynblog

          在软件开发中,我们经常会遇到这样的情况:我们需要使用一个现有的类或者接口,但它与我们系统的目标接口不兼容,而我们又不能修改它。这时候,我们该怎么办呢?大多数情况下我们都可以使用适配器模式来解决这个问题,本文将从以下四个方面讲解适配器模式

          • 简介
          • 优缺点
          • 应用场景
          • Java 代码示例

          简介

          适配器模式(Adapter Pattern)是一种结构型设计模式,它可以将一个接口转换成客户端所期待的另一个接口,从而使原本由于接口不兼容而不能一起工作的类可以一起工作。适配器模式也称为包装器模式(Wrapper Pattern),因为它通过一个包装类(即适配器)来包装不兼容的接口,并提供统一的目标接口。适配器模式可以在运行时根据需要选择不同的适配器来适配不同的被适配者。

          对象适配器模式的各角色定义如下。

          • Target(目标接口):客户端要使用的目标接口标准,对应下文中的三相插孔接口 TriplePin。
          • Adapter(适配器):实现了目标接口,负责适配(转换)被适配者的接口 specificRequest()为目标接口 request(),对应本章下文中的电视机专属适配器类 TriplePinAdapter。
          • Adaptee(被适配者):被适配者的接口标准,目前不能兼容目标接口的问题接口,可以有多种实现类,对应下文中的两相插孔接口 DualPin。
          • Client(客户端):目标接口的使用者。

          优缺点

          适配器模式的优点有:

          • 适配器模式可以增强程序的可扩展性,通过使用适配器,可以在不修改原有代码的基础上引入新的功能或者接口。
          • 适配器模式可以提高类的复用性,通过使用适配器,可以将已有的类或者接口重新组合和封装,使其符合新的需求。
          • 适配器模式可以增加类的透明度,通过使用适配器,客户端只需要关注目标接口,而无需了解被适配者的具体实现。
          • 适配器模式可以灵活地切换不同的被适配者,通过使用不同的适配器,可以动态地选择不同的被适配者来满足不同的场景。

          适配器模式的缺点有:

          • 适配器模式会增加系统的复杂性,过多地使用适配器会使系统变得零乱和难以理解。
          • 适配器模式可能会降低系统的性能,因为每次调用目标接口时都需要经过适配器的转换。
          • 适配器模式可能会违反开闭原则,如果目标接口发生变化,则需要修改所有的适配器类。

          应用场景

          适配器模式适用于以下场景:

          • 当需要在一个已有系统中引入新的功能或者接口时,它与系统的目标接口不兼容,但又不能修改原有代码时,可以使用适配器模式。例如在一个数据库操作系统中,如果想要支持多种类型的数据库源,但系统只提供了一个固定类型数据库源的操作接口时,可以使用一个数据库源操作适配器来将不同类型数据库源转换成统一类型数据库源。
          • 当需要在多个独立开发的系统或者组件之间进行协作时,但由于各自采用了不同的接口或者协议时,可以使用适配器模式。例如在一个分布式服务系统中,如果想要让不同语言编写的服务之间进行通信和调用,但各自采用了不同的通信协议和数据格式时,可以使用一个服务通信适配器来将不同协议和数据格式转换成统一协议和数据格式。

          Java 代码示例

          举一个生活中常见的实例,我们新买了一台电视机,其电源插头是两相的,不巧的是墙上的插孔却是三相的,这时电视机便无法通电使用,我们以代码来重现这个场景。

          1. 定义目标接口:三相插口 TriplePin,其中 3 个参数 l、n、e 分别对应火线(live)、零线(null)和地线(earth)。
          public interface TriplePin {

              public void electrify(int l, int n, int e);
          }
          1. 定义被适配者接口:两项插口 DualPin,可以看到参数中缺少了地线 e 参数。
          public interface DualPin {

              public void electrify(int l, int n);
          }

          1. 添加被适配者接口具体实现类:TV,可以看到 TV 实现的是两相接口,所在无法直接在三项接口中使用。
          public class TV implements DualPin {
              @Override
              public void electrify(int l, int n) {
                  System.out.println("火线通电:" + l + ",零线通电:" + n);
                  System.out.println("电视开机");
              }
          }

          1. 定义适配器类:三项接口适配器 TriplePinAdapter,实现了三项接口并且包含两项接口属性,在 electrify 方法中调用被适配设备的两插通电方法,忽略地线参数 e,以此来完成三项接口对两项接口的兼容。

          这也就意味着 TriplePinAdapter 类能帮助我们将 TV 类与三项接口兼容。

          public class TriplePinAdapter implements TriplePin {

              private DualPin dualPin;

              public TriplePinAdapter(DualPin dualPin) {
                  this.dualPin = dualPin;
              }

              @Override
              public void electrify(int l, int n, int e) {
                  // 调用被适配设备的两插通电方法,忽略地线参数e
                  dualPin.electrify(l, n);
              }
          }
          1. 定义客户端类
          public class Client {

              public static void main(String[] args) {
                  DualPin dualPinDevice = new TV();
                  TriplePin triplePinDevice = new TriplePinAdapter(dualPinDevice);
                  triplePinDevice.electrify(10, -1);
              }
          }

          输出结果如下:

          火线通电:1,零线通电:0
          电视开机

          总结

          通过利用适配器模式对系统进行扩展后,我们就不必再为解决兼容性问题去暴力修改类接口了,转而通过适配器,以更为优雅、巧妙的方式将两侧“对立”的接口“整合”在一起,顺利化解双方难以调和的矛盾,最终使它们顺利接通。

          来自 “ ITPUB博客 ” ,链接:http://www.cibkglfj.cn/70024922/viewspace-2981104/,如需转载,请注明出处,否则将追究法律责任。

          请登录后发表评论 登录
          全部评论

          注册时间:2022-12-05

          • 博文量
            240
          • 访问量
            141546
          分享:

          收藏

          --

          --

          无障碍浏览