当前位置: 首页 > news >正文

高级java每日一道面试题-2024年8月12日-设计模式篇-请列举出在JDK中几个常用的设计模式?

如果有遗漏,评论区告诉我进行补充

面试官: 请列举出在JDK中几个常用的设计模式?

我回答:

在Java Development Kit (JDK) 中,许多设计模式被广泛使用,以帮助实现软件的结构、行为和复用。下面是一些在JDK中常见的设计模式及其简要说明:

  1. 工厂模式 (Factory Pattern)

    • JDK中的java.util.Calendarjava.util.Date, java.text.NumberFormat.getInstance()等类使用了工厂模式,通过静态方法如getInstance()来创建实例,而不是直接使用构造函数。这使得类可以在不修改客户端代码的情况下改变其内部实现。
  2. 单例模式 (Singleton Pattern)

    • java.lang.Runtimejava.lang.System, java.awt.Toolkit.getDefaultToolkit()等类都是单例模式的典型例子,确保了在整个应用程序中只有一个实例,并且提供了一个全局访问点。
  3. 适配器模式 (Adapter Pattern)

    • java.awt.dnd.DragSourcejava.awt.dnd.DropTarget,java.io.InputStreamReader(InputStream)java.io.OutputStreamWriter(OutputStream)等类使用了适配器模式,允许用户只实现感兴趣的接口方法,而忽略其他方法,这是通过提供一个默认的空实现来完成的。
  4. 装饰者模式 (Decorator Pattern)

    • java.io.InputStreamjava.io.OutputStream类族使用装饰者模式,允许在运行时向对象添加新的功能,而不改变其结构。例如,BufferedInputStream就是一个装饰者,它为InputStream添加了缓冲功能。
  5. 代理模式 (Proxy Pattern)

    • java.lang.reflect.Proxy类使用代理模式,允许创建动态代理类和实例,这些代理类可以实现一组给定的接口,并在调用方法时插入额外的功能,比如日志记录或事务管理。
  6. 观察者模式 (Observer Pattern)

    • java.util.Observablejava.util.Observer接口使用了观察者模式,允许对象注册多个监听者,当状态改变时通知所有监听者。这种模式在事件驱动的系统中非常常见。
  7. 策略模式 (Strategy Pattern)

    • java.util.Collections.sort(List, Comparator)方法使用策略模式,允许传入不同的比较器来决定排序策略。
  8. 模板方法模式 (Template Method Pattern)

    • java.lang.Thread类使用模板方法模式,其中run()方法是一个模板方法,子类可以重写run()而不必关心线程启动的细节。
  9. 迭代器模式 (Iterator Pattern)

    • java.util.Iterator接口定义了遍历集合的标准方法,这使得能够以统一的方式访问集合元素,而无需了解底层集合的具体实现。
  10. 职责链模式 (Chain of Responsibility Pattern)

    • java.util.logging.Logger使用职责链模式,多个Handler可以被链接起来,每个Handler都有机会处理日志记录,如果没有处理,则将记录传递给下一个Handler

以上模式在JDK中被广泛采用,体现了设计模式在提高代码可维护性、灵活性和扩展性方面的重要性。理解这些模式不仅有助于更好地使用JDK,也有助于在自己的项目中应用这些模式。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Web Vitals:提升用户体验的关键指标
  • VR虚拟展厅与传统实体展厅相比,有哪些优势?
  • PostgreSQL 练习 ---- psql 新增连接参数
  • SpringBoot中整合Mybatis
  • 自定义实现一个 Redis 客户端
  • coze 卡片使用
  • 基于k8s集群的redis-cluster集群
  • 计算机,人工智能选题
  • 自动驾驶大模型算法助力端到端顺利落地
  • Δ-Σ ADC选型时噪声性能实例详解
  • Java元组Tuple的使用
  • Qt 哈希加密之 QCryptographicHash
  • 泛微OA流程接口调用工具类
  • SpringBoot的Web开发
  • 护眼大路灯哪个牌子好?公认五款最好护眼大路灯分享
  • [笔记] php常见简单功能及函数
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • 0x05 Python数据分析,Anaconda八斩刀
  • bearychat的java client
  • ComponentOne 2017 V2版本正式发布
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • Date型的使用
  • exif信息对照
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • TypeScript实现数据结构(一)栈,队列,链表
  • 安卓应用性能调试和优化经验分享
  • 大整数乘法-表格法
  • 第十八天-企业应用架构模式-基本模式
  • 给新手的新浪微博 SDK 集成教程【一】
  • 免费小说阅读小程序
  • 你不可错过的前端面试题(一)
  • 时间复杂度与空间复杂度分析
  • 微信小程序填坑清单
  • 在Unity中实现一个简单的消息管理器
  • 正则表达式小结
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • #define与typedef区别
  • #QT 笔记一
  • (+4)2.2UML建模图
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (5)STL算法之复制
  • (ZT)一个美国文科博士的YardLife
  • (二)原生js案例之数码时钟计时
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (规划)24届春招和25届暑假实习路线准备规划
  • (南京观海微电子)——示波器使用介绍
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (一)RocketMQ初步认识
  • (游戏设计草稿) 《外卖员模拟器》 (3D 科幻 角色扮演 开放世界 AI VR)
  • (转)我也是一只IT小小鸟
  • (自用)交互协议设计——protobuf序列化
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .gitignore文件设置了忽略但不生效