网站首页 > 精选教程 正文
京东大佬问我,常用的java设计模式有哪些?
我需要回忆一下设计模式的基本分类,通常分为创建型、结构型和行为型。然后,针对每个类别,列举最常用的模式,并给出简单的解释和例子。
创建型模式里,单例模式肯定常用,比如配置管理。工厂方法和抽象工厂可能也要提到,特别是Spring框架中的应用。建造者模式在处理复杂对象构造时有用,比如Lombok的@Builder。原型模式可能用得少一些,但Java的clone方法是一个例子。
结构型模式中,适配器模式很常见,比如旧系统接口转换。装饰器模式在Java IO流里应用广泛,比如BufferedReader。代理模式,特别是动态代理,Spring AOP会用。组合模式处理树形结构,比如菜单。外观模式简化接口,比如Slf4j。享元模式在池技术中常见,比如数据库连接池。
行为型模式里,观察者模式在事件驱动系统中常用,比如Java的事件监听。策略模式在替换算法时有用,比如Comparator。模板方法在定义算法骨架时使用,比如JdbcTemplate。责任链模式,比如Servlet的Filter。状态模式处理状态转换,比如订单状态。命令模式将请求封装为对象,比如任务队列。迭代器模式用于集合编历,Java的Iterator。中介者模式减少对象间依赖,比如聊天室。访问者模式处理复杂对象结构,比如ASM库。备忘录模式保存对象状态,比如事务回滚。
需要注意的是,用户提到是京东大佬问的,可能需要结合实际应用场景,特别是高并发、分布式系统中的使用。比如单例模式的双重检查锁,Spring中的代理和工厂,以及微服务中的模式应用。可能还要强调设计模式解决的实际问题,而不仅仅是理论。
总结时,需要分点清晰,每个模式简要说明,并举例Java中的应用场景,帮助用户理解。同时,根据用户可能的背景(面试或实际工作),调整回答的深度和侧重。
在Java开发中,设计模式是解决常见问题的经典方案。以下是24种设计模式中高频使用的核心模式,按分类整理并附带典型应用场景:
一、创建型模式(解决对象创建问题)
- 单例模式(Singleton)
- 保证一个类仅有一个实例(如配置管理、线程池)
- 关键代码:双重检查锁、枚举实现
- Runtime.getRuntime() 是JDK经典实现
- 工厂方法模式(Factory Method)
- 解耦对象创建(Spring的BeanFactory)
- 例如:Calendar.getInstance() 根据时区创建对象
- 抽象工厂模式(Abstract Factory)
- 创建产品族(不同数据库连接的工厂)
- MyBatis的SqlSessionFactory 生产不同数据库会话
- 建造者模式(Builder)
- 分步构建复杂对象(Lombok的@Builder)
- 如StringBuilder和JSON库的对象构造
- 原型模式(Prototype)
- 克隆对象提升性能(避免重复初始化)
- 实现Cloneable接口,深拷贝/浅拷贝需注意
二、结构型模式(处理类与对象组合)
- 适配器模式(Adapter)
- 兼容不兼容接口(旧系统改造)
- Spring MVC的HandlerAdapter处理多种Controller
- 装饰器模式(Decorator)
- 动态扩展功能(Java IO流体系)
- BufferedInputStream增强基础流功能
- 代理模式(Proxy)
- 控制对象访问(AOP切面编程)
- Spring的动态代理(JDK Proxy/CGLib)
- 组合模式(Composite)
- 树形结构处理(菜单/文件系统)
- MyBatis的SqlNode解析动态SQL
- 外观模式(Facade)
- 简化复杂子系统调用(日志门面Slf4j)
- 例如整合支付接口的统一入口
- 享元模式(Flyweight)
- 共享细粒度对象(连接池、String常量池)
- 如Integer缓存-128~127
三、行为型模式(对象间通信与职责划分)
- 观察者模式(Observer)
- 事件驱动机制(GUI事件监听)
- Spring的ApplicationEvent事件机制
- 策略模式(Strategy)
- 动态切换算法(支付方式选择)
- Comparator接口实现多种排序策略
- 模板方法模式(Template Method)
- 定义算法骨架(JdbcTemplate抽象流程)
- 如Servlet的service()方法结构
- 责任链模式(Chain of Responsibility)
- 请求的链式处理(权限校验链)
- Servlet Filter和Spring Interceptor
- 状态模式(State)
- 状态驱动行为(订单状态流转)
- 线程状态Thread.State切换
- 命令模式(Command)
- 封装请求为对象(任务队列、撤销操作)
- Java的Runnable即是一个命令对象
- 迭代器模式(Iterator)
- 统一集合遍历方式(Java的Iterator接口)
- 增强for循环底层实现
- 中介者模式(Mediator)
- 解耦对象间交互(聊天室消息转发)
- Spring的ApplicationContext管理Bean协作
- 访问者模式(Visitor)
- 解耦数据结构与操作(ASM字节码操作)
- 编译器语法树分析常用
高频综合应用场景
- Spring框架:工厂模式(BeanFactory)、代理模式(AOP)、模板方法(JdbcTemplate)
- 高并发系统:单例模式(线程安全实现)、享元模式(池化技术)
- 分布式架构:责任链模式(网关过滤器)、策略模式(路由算法)
掌握这些模式的关键在于理解其适用场景而非强行套用,好的设计往往是多种模式的有机结合。建议通过源码(如JDK、Spring)加深理解,并思考如何解决过度设计的问题。
猜你喜欢
- 2025-03-10 java设计模式(4)-适配器模式
- 2025-03-10 Java设计模式:桥接模式,干货总结
- 2025-03-10 Java,设计模式,结构型,外观模式,对外提供一个一致的接口
- 2025-03-10 Java设计模式:适配器模式,干货总结
- 2025-03-10 Java设计模式:代理模式,干货总结
- 2025-03-10 「java设计模式」(7)——策略模式(案例解析)
- 2025-03-10 Java开发篇——设计模式(5)装饰设计模式
- 2025-03-10 快速上手Java设计模式之简介
- 2025-03-10 Java设计模式-享元模式
- 2025-03-10 Java设计模式系列之装饰器模式介绍
你 发表评论:
欢迎- 04-11Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- 04-11Java中你知道几种从字符串中找指定的字符的数量
- 04-11探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- 04-11Python字符串详解与示例(python字符串的常见操作)
- 04-11java正则-取出指定字符串之间的内容
- 04-11String s1 = new String("abc");这句话创建了几个字符串对象?
- 04-11java判断字符串中是否包含某个字符
- 04-11关于java开发中正确的发牌逻辑编写规范
- 最近发表
-
- Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- Java中你知道几种从字符串中找指定的字符的数量
- 探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- Python字符串详解与示例(python字符串的常见操作)
- java正则-取出指定字符串之间的内容
- String s1 = new String("abc");这句话创建了几个字符串对象?
- java判断字符串中是否包含某个字符
- 关于java开发中正确的发牌逻辑编写规范
- windows、linux如何后台运行jar(并且显示进程名)
- 腾讯大佬私人收藏,GitHub上最受欢迎的100个JAVA库,值得学习
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)