网站首页 > java教程 正文
京东大佬问我,常用的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-30 Java设计模式在实际开发中的奇妙应用
- 2025-03-30 JAVA设计模式之策略模式(java 策略设计模式)
- 2025-03-30 Java设计模式在实际项目中的精彩运用
- 2025-03-30 Java设计模式在实际项目中的应用(java设计模式的作用)
- 2025-03-30 Java设计模式实战案例解析(java中设计模式到底是干啥的)
- 2025-03-30 Java程序员必备的设计模式:轻松构建优雅的代码架构
- 2025-03-30 从零学习 Java 设计模式(java设计模式及实践)
- 2025-03-30 Java设计模式之单例模式:独孤求败的编程艺术
- 2025-03-30 java设计模式之模板设计模式_V1(java设计模式详解)
- 2025-03-30 Java设计模式系列:轻松掌握单例模式的最佳实践
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)