「全网最细 + 实战源码案例」设计模式——抽象工厂模式

核心思想

  • 抽象工厂模式是一种创建型设计模式,它提供一个接口,用于创建一系列相关或互相依赖的对象,而无需指定它们的具体类。抽象工厂模式解决了产品族的问题,可以管理和创建一组相关的产品。

结构

1. 抽象工厂

  • 定义创建一些列相关对象的接口。

2. 具体工厂

  • 实现抽象工厂接口,负责实例化具体的产品对象。

3. 抽象产品

  • 定义一类产品的接口。

4. 具体产品

  • 实现抽象产品接口,提供具体产品的功能。

适用场景

1. 系统需要创建一系列相关或互相依赖的对象。

2. 系统的产品族固定,但产品种类经常变化。

3. 需要保证同一个工厂生成的产品族之间的兼容性。


优缺点

优点:

1.1. 分离接口和实现:客户端通过抽象工厂、抽象产品与具体工厂、具体产品解耦。

1.2. 产品族管理方便:保证同一产品族对象的一致性。

1.3. 扩展性好:支持新增具体工厂来扩展新的产品族。

缺点:

1.1. 产品族扩展困难:如果新增产品族,需要修改抽象工厂及所有具体工厂接口。

1.2. 复杂性增加:需要增加多个类,代码结构更复杂。


示例

1. 普通版

2. 改进版------配置文件+反射

  • 在改进版的抽象工厂模式中,我们通过配置文件反射机制动态决定具体工厂的选择,减少客户端对具体工厂和具体产品的硬编码依赖,使系统更灵活、更易扩展。
  • 新增产品族示例
    • 如果需要新增一个产品族(如 ChineseStyleFactory),只需:
      • 新增具体咖啡类 Coffee3 和 甜品类Dessert3
      • 新增具体工厂类 ChineseStyleFactory实现 CoffeeDessertFactory
      • 修改配置文件 factory=com.colin.patterns.creational_patterns.config_abstract_factory.ChineseStyleFactory
    • 客户端代码完全不需要改动,系统即可使用新的产品族。

与其他模式的关系

相关推荐
AI进化营-智能译站8 分钟前
ROS2 C++开发系列13-运算符重载让ROS2消息处理更自然
java·开发语言·c++·ai
时空系10 分钟前
第6篇:数据容器——管理大量数据 Rust中文编程
开发语言·后端·rust
eLIN TECE17 分钟前
Go基础之环境搭建
开发语言·后端·golang
念何架构之路18 分钟前
Go反射应用技巧
开发语言·后端·golang
shjita19 分钟前
java根据键值对中值的大小进行排序的手法。
java·开发语言·servlet
司南-704937 分钟前
Dense结构下的 大模型系统架构研究
服务器·人工智能·后端
GISer_Jing38 分钟前
AI全栈转型_TS后端学习路线
前端·人工智能·后端·学习
薪火铺子39 分钟前
Spring Security 6.x 实战指南
java·后端·spring
全栈小刘43 分钟前
Claude Code 为什么这么顺?Anthropic 最新复盘:真正撑住它的不是模型,而是缓存
后端
BING_Algorithm1 小时前
一文搞定 AOP 所有核心知识点
spring boot·后端·spring