当前位置: 首页 > news >正文

设计模式实战指南:从源码解析到Java后端架构的艺术

🎯 设计模式实战指南:从源码解析到Java后端架构的艺术

概述

本文档基于设计模式分类,详细介绍Java后端开发中各种设计模式的实际应用场景,结合Spring、MyBatis、Redis等主流框架的源码分析,帮助开发者深入理解设计模式在实践中的价值。

一、创建型模式

1. 单例模式(Singleton Pattern)

应用场景
  • 数据库连接池
  • 缓存管理器
  • 配置管理器
  • 日志记录器
Spring框架中的应用

Spring IoC容器本身就是单例模式的典型应用

// Spring ApplicationContext 单例实现
public class AnnotationConfigApplicationContext extends GenericApplicationContext {private final AnnotatedBeanDefinitionReader reader;private final ClassPathBeanDefinitionScanner scanner;public AnnotationConfigApplicationContext() {this.reader = new AnnotatedBeanDefinitionReader(this);this.scanner = new ClassPathBeanDefinitionScanner(this);}
}

Spring Bean的默认作用域就是单例

// Spring BeanFactory 中的单例管理
public class DefaultSingletonBeanRegistry extends FactoryBeanRegistrySupport {// 单例对象缓存private final Map<String, Object> singletonObjects = new ConcurrentHashMap<>(256);protected Object getSingleton(String beanName, boolean allowEarlyReference) {Object singletonObject = this.singletonObjects.get(beanName);if (singletonObject == null && isSingletonCurrentlyInCreation(beanName)) {// 单例创建逻辑}return singletonObject;}
}
Redis客户端单例应用
// JedisPool 单例模式实现
public class RedisManager {private static volatile JedisPool jedisPool;public static JedisPool getInstance() {if (jedisPool == null) {synchronized (RedisManager.class) {if (jedisPool == null) {JedisPoolConfig config = new JedisPoolConfig();config.setMaxTotal(100);config.setMaxIdle(10);jedisPool = new JedisPool(config, "localhost", 6379);}}}return jedisPool;}
}

2. 工厂方法模式(Factory Method Pattern)

应用场景
  • 数据库连接工厂
  • 消息队列工厂
  • 缓存工厂
  • 序列化器工厂
Spring框架中的应用

BeanFactory - Spring的核心工厂

// Spring BeanFactory 接口
public interface BeanFactory {Object getBean(String name) throws BeansException;<T> T getBean(String name, Class<T> requiredType) throws BeansException;<T> T getBean(Class<T> requiredType) throws BeansException;
}// 具体实现类
public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFactoryimplements ConfigurableListableBeanFactory, BeanDefinitionRegistry {@Overridepublic <T> T getBean(Class<T> requiredType) throws BeansException {return getBean(requiredType, (Object[]) null);}
}
MyBatis中的工厂应用
// MyBatis SqlSessionFactory
public interface SqlSessionFactory {SqlSession openSession();SqlSession openSession(boolean autoCommit);SqlSession openSession(Connection connection);
}// 默认实现
public class DefaultSqlSessionFactory implements SqlSessionFactory {@Overridepublic SqlSession openSession() {return openSessionFromDataSource(configuration.getDefaultExecutorType(), null, false);}
}

3. 抽象工厂模式(Abstract Factory Pattern)

应用场景
  • 数据库访问层抽象
  • 消息中间件抽象
  • 缓存系统抽象
Spring JDBC中的应用
// 数据源抽象工厂
public interface DataSource extends CommonDataSource, Wrapper {Connection getConnection() throws SQLException;Connection getConnection(String username, String password) throws SQLException;
}// 具体实现
public class HikariDataSource extends HikariConfig implements DataSource {@Overridepublic Connection getConnection() throws SQLException {return getConnection(username, password);}
}

4. 建造者模式(Builder Pattern)

应用场景
  • 复杂对象构建
  • 配置对象构建
  • 查询条件构建
MyBatis中的应用
// MyBatis SqlSessionFactoryBuilder
public class SqlSessionFactoryBuilder {public SqlSessionFactory build(InputStream inputStream) {return build(inputStream, null, null);}public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) {try {XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties);return build(parser.parse());} catch (Exception e) {throw ExceptionFactory.wrapException("Error building SqlSession.", e);}}
}
Spring Boot配置构建
// Spring Boot ApplicationBuilder
public class SpringApplicationBuilder {private final SpringApplication application;public SpringApplicationBuilder(Class<?>... sources) {this.application = new SpringApplication(sources);}public SpringApplicationBuilder properties(String... defaultProperties) {this.application.setDefaultProperties(StringUtils.toStringArray(defaultProperties));return this;}
}

5. 原型模式(Prototype Pattern)

应用场景
  • 对象克隆
  • 配置复制
  • 模板复制
Spring中的应用
// Spring Bean的prototype作用域
public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFactory 
http://www.lryc.cn/news/572649.html

相关文章:

  • mysql查询使用`_rowid` 虚拟列
  • Apipost 签约锐捷网络:AI赋能,共推 ICT 领域 API 生态智能化升级
  • (链表:哈希表 + 双向链表)146.LRU 缓存
  • 性能测试-jmeter实战3
  • 二十二章 stable diffusion SDXL1.0模型 介绍
  • 期货反向跟单-终止盘手合作原则(二)
  • 原点安全入选 Gartner®“数据安全平台”中国市场指南代表厂商
  • Mac电脑-SSH客户端-Termius
  • JetBrains IDE v2025.1 升级,AI 智能+语言支持齐飞
  • Kafka协议开发总踩坑?3步拆解二进制协议核心
  • OpenGL和OpenGL ES区别
  • 可编辑64页PPT | 基于DeepSeek的数据治理方案
  • SaaS+AI架构实战,
  • AWS CloudFormation 实战:使用 App Runner 部署 GlowChat 连接器服务
  • 【AI驱动网络】
  • OpenStack Dashboard在指定可用域(Availability Zone)、指定节点启动实例
  • Seata:微服务分布式事务的解决方案
  • PLuTo 编译器示例9-12
  • 让大模型“更懂人话”:对齐训练(RLHF DPO)全流程实战解析
  • Python实例题:基于 Apache Kafka 的实时数据流处理平台
  • 腾讯云COS“私有桶”下,App如何安全获得音频调用流程
  • React Native【实战范例】弹跳动画菜单导航
  • 2025-06-20 VLC 查看视频时候是如何知道 RTP 图像包是通过 TCP 还是 UDP 协议传输的呢?
  • cusor资源管理器缩进调整与工具条竖着摆放
  • 【Java学习笔记】线程基础
  • C++实例化对象与初始化的区别:深入解析与最佳实践
  • EfficientVLA:面向视觉-语言-动作模型无训练的加速与压缩
  • 准备开始适配高德Flutter的鸿蒙版了
  • 观远ChatBI:加速零售消费企业数据驱动的敏捷决策
  • 以太坊节点搭建私链(POA)