跳转到主内容
极星编程网:以代码为星,赴技术山海!

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

目录

一、创建型模式(Creational Patterns)

二、结构型模式(Structural Patterns)

2.1 高频核心模式2.2 中等频率模式

三、行为型模式(Behavioral Patterns)

3.1 高频核心模式3.2 中等频率模式

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

五、选型决策指南

设计模式分为三大类:

创建型(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 ArrayList的clone()实现

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.

HttpServlet的service()模板方法(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 list = new ArrayList<>();Iterator it = list.iterator();

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

五、选型决策指南

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

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

您可能感兴趣的文章:Java设计模式之访问者模式使用场景及代码示例Java设计模式 模板模式及应用场景解析Java中策略设计模式的实现及应用场景java设计模式之策略模式在促销活动场景中的使用案例

相关文章