java中设计模式之适配器模式

发布时间 - 2026-01-11 03:22:52    点击率:

java中设计模式之适配器模式

 前言:

    适配器模式可以将一个类或接口应用于另一个不同但是却有联系的接口,主要的做法是通过声明一个目标接口的实现类,在该类中声明一个将被适配类或接口(被适配者)作为参数的构造器和被适配者的实例,这样在实现目标接口的时候就可以调用被适配者的实例,并且辅以一些额外的操作。适配器模式的主体有三个部分:适配者,适配者实现类和被适配者。具体类结构如下图:

      这里将被适配者的对象以组合的方式放到适配器类中,那么被适配者及其实现者都可以使用该适配器。适配器模式的优点在于可以将不同类型但是工作目的相似的对象兼容起来,而缺点在于,如果目标接口较大,那么要进行兼容工作就需要许多额外的代码。

      这里以一个不太符合实际的例子来对适配器模式进行说明。火鸡和鸭子都是可以叫并且飞的,但是火鸡和鸭子的叫声不一样,并且火鸡也没有鸭子飞得远。如果想把一只火鸡假扮为一只鸭子,就需要将火鸡对象进行一些装扮,这里我们就可以声明一个装扮类,该装扮类也是鸭子类型的一种,当火鸡进入该装扮之后就变成了一只鸭子。具体的类实现如下:

目标接口(鸭子接口):

public interface Duck {
  void quack();
  void fly();
}

目标接口的正常实现(鸭子实现):

public class MallardDuck implements Duck {
  @Override
  public void quack() {
    System.out.println("Quack");
  }

  @Override
  public void fly() {
    System.out.println("I'm flying");
  }
}

被适配者接口(火鸡接口):

public interface Turkey {
  void gobble();
  void fly();
}

被适配者一般实现(火鸡类):

public class WildTurkey implements Turkey {
  @Override
  public void gobble() {
    System.out.println("Gobble gobble");
  }

  @Override
  public void fly() {
    System.out.println("I'm flying a short distance");
  }
}

适配器:

public class TurkeyAdapter implements Duck {
  private Turkey turkey;

  public TurkeyAdapter(Turkey turkey) {
    this.turkey = turkey;
  }

  @Override
  public void quack() {
    turkey.gobble();
  }

  @Override
  public void fly() {
    for (int i = 0; i < 5; i++) {
      turkey.fly();
    }
  }
}

      通过火鸡适配器,我们将火鸡适配成了一只鸭子。这里需要说明的是,适配器模式与装饰者模式都是对源对象进行装饰,而达到一定的效果的,但是适配器模式和装饰者模式的区别在于,适配器模式是适配源对象,使其能够符合特定的接口,而装饰者模式是对源对象的功能的一个扩充,使其能做更多的工作。

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# java  # 适配器  # 适配器的实例详解  # 适配器的详解  # Java设计模式之适配器模式的示例详解  # Java 设计模式之适配器模式详解  # 深入理解Java设计模式之适配器模式  # Java设计模式--适配器模式详解  # java设计模式之浅谈适配器模式  # Java通俗易懂系列设计模式之适配器模式  # 详解JAVA设计模式之适配器模式  # Java设计模式以虹猫蓝兔的故事讲解适配器模式  # 一只  # 都是  # 将被  # 使其  # 就可以  # 类中  # 的是  # 不太  # 如有  # 希望能  # 可以使用  # 应用于  # 想把  # 能做  # 却有  # 谢谢大家  # 不同类型  # 如下图  # 辅以  # 飞得 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: WordPress 子目录安装中正确处理脚本路径的完整指南  简历没回改:利用AI润色让你的文字更专业  黑客入侵网站服务器的常见手法有哪些?  如何挑选优质建站一级代理提升网站排名?  如何在IIS7中新建站点?详细步骤解析  装修招标网站设计制作流程,装修招标流程?  如何用已有域名快速搭建网站?  北京专业网站制作设计师招聘,北京白云观官方网站?  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】  Python文本处理实践_日志清洗解析【指导】  如何在 React 中条件性地遍历数组并渲染元素  如何用免费手机建站系统零基础打造专业网站?  如何快速生成橙子建站落地页链接?  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  黑客如何通过漏洞一步步攻陷网站服务器?  ,怎么在广州志愿者网站注册?  个人网站制作流程图片大全,个人网站如何注销?  Python制作简易注册登录系统  如何快速建站并高效导出源代码?  HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】  Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册  javascript事件捕获机制【深入分析IE和DOM中的事件模型】  jQuery 常见小例汇总  简历在线制作网站免费版,如何创建个人简历?  如何自定义建站之星模板颜色并下载新样式?  详解Oracle修改字段类型方法总结  Laravel中的Facade(门面)到底是什么原理  Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解  中山网站制作网页,中山新生登记系统登记流程?  Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全  googleplay官方入口在哪里_Google Play官方商店快速入口指南  如何使用 jQuery 正确渲染 Instagram 风格的标签列表  如何快速搭建虚拟主机网站?新手必看指南  jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】  Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤  魔毅自助建站系统:模板定制与SEO优化一键生成指南  如何在建站之星绑定自定义域名?  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法  ,在苏州找工作,上哪个网站比较好?  瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口  如何在Windows环境下新建FTP站点并设置权限?  Laravel如何集成Inertia.js与Vue/React?(安装配置)  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  Linux后台任务运行方法_nohup与&使用技巧【技巧】  使用spring连接及操作mongodb3.0实例  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  网站建设整体流程解析,建站其实很容易!  Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置