当前位置: 代码网 > it编程>编程语言>Java > Java常用设计模式及应用场景示例详解

Java常用设计模式及应用场景示例详解

2026年03月21日 Java 我要评论
设计模式分为三大类:创建型(5种)、结构型(7种)、行为型(11种),以下是 java 开发中最核心、高频使用的模式及真实场景一、创建型模式(creational patterns)模式核心目的jav

设计模式分为三大类:创建型(5种)、结构型(7种)、行为型(11种),以下是 java 开发中最核心、高频使用的模式及真实场景

一、创建型模式(creational patterns)

模式核心目的java/框架中的应用场景
单例模式确保类仅有一个实例,全局访问1. spring bean 默认作用域(singleton)
2. runtime.getruntime() 获取 jvm 运行时
3. 数据库连接池(如 hikaricp 的池管理器)
工厂模式
(简单工厂/工厂方法/抽象工厂)
封装对象创建逻辑,解耦调用者与实现1. calendar.getinstance() 创建日历对象
2. jdbc drivermanager 获取数据库连接
3. spring beanfactory 创建和管理 bean
建造者模式分步构建复杂对象,链式调用1. stringbuilder.append() 构建字符串
2. spring security user.withdefaultpasswordencoder()
3. lombok @builder 自动生成建造者
原型模式通过克隆创建对象,避免重复初始化1. object.clone() 方法
2. jdk arraylistclone() 实现
3. spring bean 的 prototype 作用域

二、结构型模式(structural patterns)

2.1 高频核心模式

模式核心目的java/框架中的应用场景
代理模式为对象提供代理,控制访问或增强功能1. spring aop 动态代理(jdk 动态代理/cglib)
2. mybatis mapper 接口 的代理实现
3. rmi 远程代理 实现跨 jvm 调用
装饰器模式动态为对象添加职责,透明扩展1. java io 流bufferedinputstream 装饰 fileinputstream
2. spring cache 装饰器 增强方法缓存
3. servlet filter 链 装饰 http 请求处理
适配器模式转换接口,使不兼容类协同工作1. arrays.aslist() 将数组适配为 list
2. spring mvc handleradapter 适配不同 controller
3. jpa 的 jpavendoradapter 适配不同数据库
外观模式为子系统提供统一入口,简化调用1. spring jdbctemplate 封装 jdbc 复杂操作
2. slf4j 门面 统一日志框架(logback/log4j)
3. tomcat requestfacade 封装 servletrequest

2.2 中等频率模式

模式核心目的java/框架中的应用场景
组合模式树形结构,统一处理单个对象和组合对象1. java swing gui 组件(container 包含 component)
2. jsf uicomponent 树
3. 组织结构树(员工与部门统一接口)
桥接模式分离抽象与实现,独立扩展1. jdbc 驱动桥接(driver 桥接不同数据库协议)
2. spring 的桥接模式 在 bean 定义与实现间
3. awt 的 peer 架构(跨平台 gui)
享元模式共享细粒度对象,节省内存1. string 字符串常量池(如 "abc" 复用)
2. integer.valueof() 缓存 -128~127 对象
3. 数据库连接池 复用连接对象

三、行为型模式(behavioral patterns)

3.1 高频核心模式

模式核心目的java/框架中的应用场景
策略模式封装算法族,运行时动态切换1. spring resource 策略 加载(classpath/file/url)
2. collections.sort() 传入 comparator 策略
3. 支付系统 支持微信/支付宝/银联多策略
观察者模式发布-订阅,一对多依赖通知1. java eventlistener(如 servletcontextlistener)
2. spring applicationevent 事件驱动(如 contextrefreshedevent)
3. guava eventbus 组件解耦
模板方法模式定义算法骨架,子类实现细节1. spring jdbctemplate 执行流程模板
2. httpservletservice() 模板方法(doget/dopost)
3. abstractapplicationcontext 的 refresh() 模板
责任链模式链式传递请求,松散耦合1. servlet filter 链(认证→日志→鉴权)
2. spring security filterchain 安全过滤
3. netty channelpipeline 责任链处理 io 事件
迭代器模式顺序访问聚合对象元素1. java iterator/iterable 接口(arraylist.iterator()
2. mybatis cursor 游标迭代大数据
3. guava fluentiterable 增强迭代
命令模式封装请求为对象,支持撤销/队列1. runnable/callable 封装任务
2. spring jmstemplate 发送消息命令
3. 撤销/重做功能(编辑器历史栈)
状态模式对象行为随状态改变而改变1. 线程 thread.state 枚举(new/runnable/blocked)
2. 订单状态机(待支付→已支付→已发货)
3. game 角色状态(正常/眩晕/冰冻)

3.2 中等频率模式

模式核心目的java/框架中的应用场景
备忘录模式保存对象状态,支持恢复1. serializable 序列化 保存对象状态
2. git 版本控制 保存代码历史
3. 游戏存档/读档
中介者模式封装对象交互,降低耦合1. java concurrency executor 协调线程
2. spring mvc dispatcherservlet 协调 controller/view
3. 消息队列中间件 解耦服务
访问者模式分离操作与对象结构1. java annotationvaluevisitor 注解处理
2. 编译器 ast 遍历
3. 报表导出(同一数据导出 csv/pdf/excel)
解释器模式定义语法规则,解释执行1. java 正则表达式 pattern
2. spring spel 表达式#{...}
3. sql 解析器(如 druid sql parser)

四、设计模式在主流框架中的体现

spring framework

// 单例模式:bean 默认作用域
@component  // 默认 singleton
public class userservice { ... }

// 工厂模式:beanfactory 创建 bean
applicationcontext ctx = new annotationconfigapplicationcontext(appconfig.class);
userservice service = ctx.getbean(userservice.class);

// 代理模式:aop 动态代理
@aspect
public class logaspect {
    @around("execution(* com.example.*.*(..))")
    public object log(proceedingjoinpoint pjp) { ... }
}

// 模板方法:jdbctemplate
jdbctemplate.query("select * from users", (rs, rownum) -> new user(rs));

mybatis

// 代理模式:mapper 接口代理
public interface usermapper {
    @select("select * from users where id = #{id}")
    user selectbyid(long id);
}
// mybatis 自动生成代理实现类

// 建造者模式:sqlsessionfactorybuilder
sqlsessionfactory factory = new sqlsessionfactorybuilder()
    .build(inputstream);

jdk 核心库

// 装饰器模式:io 流
inputstream is = new bufferedinputstream(
    new fileinputstream("file.txt")
);

// 迭代器模式:集合遍历
list<string> list = new arraylist<>();
iterator<string> it = list.iterator();

// 单例模式:runtime
runtime runtime = runtime.getruntime();
runtime.exec("ls -l");

五、选型决策指南

场景需求推荐模式避免场景
全局共享资源单例模式频繁创建销毁
对象创建复杂建造者/工厂模式在业务代码硬编码 new
需要动态扩展功能装饰器/代理模式继承层级过深
处理流程固定,步骤可变模板方法模式重复代码
多策略切换策略模式if-else 地狱
组件解耦/事件驱动观察者/中介者模式直接依赖调用
树形结构管理组合模式递归处理复杂
跨接口兼容适配器模式修改原有代码

黄金法则:优先使用创建型模式解耦对象创建,用结构型模式优化代码组织,用行为型模式提升扩展性。在框架开发中多使用代理/装饰器,业务开发中多使用策略/模板方法。

到此这篇关于java常用设计模式及应用场景的文章就介绍到这了,更多相关java设计模式及应用场景内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com