本文目录导读:

Java经典设计模式通常分为创建型、结构型和行为型三大类,共23种(GoF模式),在实际的Java开发(尤其是Spring、JDK、Java EE)中,以下几种最常见且最具代表性。
创建型模式(关注对象创建机制)
单例模式(Singleton)
- 场景:保证一个类仅有一个实例,提供全局访问点。
- Java经典实现:
Runtime.getRuntime()、Spring默认的Bean作用域(singleton)。 - 核心代码:私有构造器 + 静态方法返回唯一实例(推荐使用枚举或双重校验锁)。
工厂方法模式 & 抽象工厂模式
- 场景:将对象创建逻辑封装,实现“开闭原则”。
- Java经典案例:
java.util.Collection接口的iterator()方法(工厂方法)。- Spring的
BeanFactory(工厂模式)。 - 数据库连接池(如HikariCP创建
Connection对象)。
建造者模式(Builder)
- 场景:构建复杂对象,分离构造与表示。
- Java经典案例:
StringBuilder/StringBuffer。- Lombok的
@Builder注解。 - 不可变对象(如
java.util.ImmutableList)。
原型模式(Prototype)
- 场景:通过克隆创建对象,避免重复初始化。
- Java经典案例:
Object.clone()(需实现Cloneable接口),例如ArrayList的浅拷贝。
结构型模式(关注类/对象的组合)
适配器模式(Adapter)
- 场景:使不兼容的接口协同工作。
- Java经典案例:
java.io.InputStreamReader(将InputStream适配为Reader)。- Spring AOP的
AdvisorAdapter。 Arrays.asList()(将数组转换为List适配器)。
代理模式(Proxy)
- 场景:控制对对象的访问,例如延迟加载、权限控制。
- Java经典案例:
- 静态代理:
Thread与Runnable。 - 动态代理:JDK动态代理(
java.lang.reflect.Proxy)和CGLIB(Spring AOP默认)。
- 静态代理:
装饰器模式(Decorator)
- 场景:动态添加行为,比继承更灵活。
- Java经典案例:
java.io.BufferedInputStream装饰FileInputStream。javax.servlet.http.HttpServletRequestWrapper。
外观模式(Facade)
- 场景:为复杂子系统提供统一入口。
- Java经典案例:
java.net.URL(封装网络通信细节)。
行为型模式(关注对象间通信与职责分配)
观察者模式(Observer)
- 场景:一对多依赖,状态变化自动通知。
- Java经典案例:
java.util.Observer/Observable(JDK 9之前)。- Spring事件机制:
ApplicationListener+ApplicationEvent。 - 消息队列(如Kafka发布/订阅)。
策略模式(Strategy)
- 场景:算法可互换,封装变化点。
- Java经典案例:
java.util.Comparator接口(排序策略不同)。- Spring的
Resource接口(文件/HTTP等访问策略)。 - 电商折扣计算(普通价、会员价、促销价)。
模板方法模式(Template Method)
- 场景:固定骨架+子类实现具体步骤。
- Java经典案例:
AbstractList的addAll()(内部调用子类实现的add())。- Spring的
JdbcTemplate(执行SQL固定流程,回调处理结果)。 - Servlet的
doGet()/doPost()。
责任链模式(Chain of Responsibility)
- 场景:请求沿链传递直到被处理。
- Java经典案例:
javax.servlet.Filter(filter链)。- Spring Security的
SecurityFilterChain。 - Java日志框架(
Logger按级别向上传播)。
迭代器模式(Iterator)
- 场景:统一集合遍历方式。
- Java经典案例:
java.util.Iterator(所有Collection的实现)。
Java开发中额外高频使用的模式
| 模式 | 典型应用场景 | 代表案例 |
|---|---|---|
| 享元模式 | 连接池、字符串常量池、线程池 | String.intern()、Integer.valueOf()缓存 |
| 命令模式 | 撤回/重做、线程池任务 | Runnable(将“操作”封装为对象) |
| 状态模式 | 有限状态机(订单状态、网络状态) | 电商订单(待支付/已支付/已发货) |
| 解释器模式 | 正则表达式、SPEL表达式 | java.util.regex.Pattern |
如何快速判断一个模式?
- “工厂”:凡是名称带有
Factory、Builder、Provider的,大概率是创建型模式。 - “包装”:
InputStream、Buffered、Wrapper,常是装饰器或适配器。 - “回调”:
Listener、Handler、Callback,常是观察者或模板方法。 - “可插拔”:
Strategy、Policy,常是策略模式。
在Java面试或实际开发中,单例、工厂、代理、观察者、策略、模板方法是最常被问及、也最实用的六个模式,理解它们与Spring、JDK框架的结合点,会让你对Java设计有更深刻的认识。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播