SOLID原则在代码落地中的模式应用分类表
表格说明
- 创建型模式:关注对象创建机制,增加创建对象的灵活性和复用性
- 结构型模式:关注类和对象的组合,优化类之间的关系
- 行为型模式:关注对象间的职责分配和通信机制
| SOLID原则 | 模式类别 | 最佳适用模式 | 模式应用场景 | SpringBoot/SpringCloud中的具体应用 |
|---|---|---|---|---|
| 单一职责原则(SRP) | 创建型 | 单例模式 工厂方法模式 | • 确保每个类/组件只负责单一功能 • 创建独立的业务处理器实例 | • @Service、@Component注解实现单例 • @Configuration类中定义专用Bean工厂 • 为每个微服务职责创建独立配置类 |
| 结构型 | 外观模式 代理模式 | • 为复杂子系统提供统一接口 • 为单一职责的类添加访问控制 | • @FeignClient接口作为服务外观 • Spring AOP实现方法级职责隔离 • API网关路由到专门控制器 |
|
| 行为型 | 策略模式 责任链模式 | • 将不同算法封装为独立策略 • 将处理流程分解为单一职责的处理器 | • 支付方式、验证策略的独立实现 • 请求处理管道中的过滤器链 • 事件监听器的职责分离 | |
| 开闭原则(OCP) | 创建型 | 抽象工厂模式 建造者模式 | • 通过抽象创建不同类型对象 • 灵活构建复杂对象而不修改代码 | • JpaRepositoryFactoryBean创建不同数据源仓库 • @Builder注解构建复杂DTO • 多环境配置的不同Bean创建 |
| 结构型 | 装饰器模式 适配器模式 | • 动态扩展对象功能 • 适配不同接口实现统一扩展点 | • Spring Security过滤器链装饰 • HttpMessageConverter适配不同数据格式 • @Transactional注解的事务装饰 |
|
| 行为型 | 策略模式 观察者模式 | • 新增策略不影响现有代码 • 扩展事件处理器不影响发布者 | • 新的业务规则通过策略模式加入 • 微服务事件驱动的扩展机制 • @EventListener注册新事件处理器 |
|
| 里氏替换原则(LSP) | 创建型 | 原型模式 工厂模式 | • 确保子类实例可替换父类 • 通过工厂保证创建正确的子类 | • 深拷贝Bean进行安全修改 • 工厂方法验证子类契约符合性 • 配置化的实现类实例化 |
| 结构型 | 桥接模式 组合模式 | • 分离抽象与实现保证可替换性 • 树形结构中的一致性替换 | • 不同存储策略的桥接实现 • 菜单权限的树形组合结构 • 微服务接口的版本桥接 | |
| 行为型 | 模板方法模式 状态模式 | • 子类重写步骤不改变算法结构 • 状态转换保持父类契约 | • JdbcTemplate的固定执行流程 • 订单状态机的统一接口 • 工作流引擎的步骤执行 | |
| 依赖倒置原则(DIP) | 创建型 | 依赖注入(DI) 控制反转(IoC) | • 通过容器注入抽象实现 • 反转控制权获得灵活性 | • Spring IoC容器管理Bean生命周期 • @Autowired实现依赖注入 • @Qualifier精确控制实现选择 |
| 结构型 | 桥接模式 适配器模式 | • 抽象与实现分离 • 不同实现适配统一接口 | • 数据库访问的多种技术桥接 • 第三方API的适配器封装 • 消息队列的多实现适配 | |
| 行为型 | 策略模式 模板方法模式 | • 基于抽象策略执行 • 固定流程调用抽象操作 | • 多种算法策略的统一调用 • 业务流程模板调用抽象服务 • 规则引擎的策略执行 | |
| 接口隔离原则(ISP) | 创建型 | 工厂方法模式 原型模式 | • 为不同客户端创建专用接口实例 • 克隆特定接口功能的对象 | • 为不同角色创建专用服务实例 • 特定功能模块的独立工厂 • 接口特定实现的原型复制 |
| 结构型 | 适配器模式 装饰器模式 | • 将胖接口拆分为专用接口 • 为接口添加特定功能 | • 将通用接口适配为专用接口 • 为接口添加缓存、日志等功能 • @Validated分组验证接口 |
|
| 行为型 | 迭代器模式 中介者模式 | • 提供专用遍历接口 • 通过中介减少接口依赖 | • 分页查询的专用迭代器 • 微服务间通过网关中介通信 • 事件总线的专用监听器接口 | |
| 合成复用原则(CRP) | 创建型 | 组合模式 享元模式 | • 通过对象组合复用功能 • 共享细粒度对象减少创建开销 | • 权限树的节点组合 • 数据库连接池的享元复用 • 微服务客户端的连接复用 |
| 结构型 | 组合模式 装饰器模式 代理模式 | • 对象包含其他对象实现复用 • 包装对象添加职责 • 控制对象访问实现复用 | • 业务对象的组件组合 • Spring AOP方法拦截装饰 • @Cacheable代理实现缓存复用 |
|
| 行为型 | 责任链模式 观察者模式 策略模式 | • 对象链传递请求复用处理能力 • 一对多通知复用事件处理 • 算法封装复用决策逻辑 | • 过滤器链的请求处理 • @EventListener的事件广播 • 多种业务策略的组合使用 |
|
| 迪米特原则(LoD) | 创建型 | 建造者模式 工厂模式 | • 封装复杂对象创建过程 • 隐藏创建细节减少知识暴露 | • 复杂查询条件的建造器 • DTO转换的工厂封装 • 配置对象的构建器模式 |
| 结构型 | 外观模式 代理模式 | • 提供统一简单接口 • 控制访问减少直接依赖 | • BFF层的外观封装 • API网关的路由代理 • @Transactional的事务边界代理 |
|
| 行为型 | 中介者模式 命令模式 | • 集中协调减少直接通信 • 封装请求减少调用者知识 | • 微服务编排的中介者 • 异步任务执行的命令封装 • 工作流引擎的命令模式 |
模式应用的核心要点
创建型模式在SOLID中的应用重点
- 解决对象创建的问题,确保在遵循SOLID原则的同时灵活创建对象
- 重点关注依赖注入、工厂模式、建造者模式的使用
- 在SpringBoot中充分利用
@Configuration、@Bean等注解
结构型模式在SOLID中的应用重点
- 优化类和对象的结构关系,支持低耦合高内聚的设计
- 重点关注装饰器、代理、外观、适配器模式
- 在SpringCloud中通过网关、服务发现等机制实现
行为型模式在SOLID中的应用重点
- 规范对象间的交互行为,确保职责清晰、协作灵活
- 重点关注策略、观察者、责任链、模板方法模式
- 在微服务架构中通过事件驱动、消息队列等实现
这个表格提供了在实际项目中应用SOLID原则的模式选择指南,帮助开发者根据具体场景选择最合适的设计模式来实现高质量的软件架构。