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

核心思想

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

结构

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
    • 客户端代码完全不需要改动,系统即可使用新的产品族。

与其他模式的关系

相关推荐
越来越无动于衷20 分钟前
企业信息管理系统开发实战:基于 Spring Boot+MyBatis+Thymeleaf
spring boot·后端·mybatis
调试人生的显微镜26 分钟前
移动端WebView调试实战 全面排查渲染性能与布局跳动问题
后端
轻语呢喃33 分钟前
JavaScript数据检索:从顺序到哈希的效率跃迁
javascript·后端
困鲲鲲35 分钟前
设计模式:状态模式 State
设计模式·状态模式
小杰来搬砖38 分钟前
讲解缓存穿透、缓存击穿、缓存雪崩
后端
该用户已不存在1 小时前
2025 年,Python工具别只知道Pycharm了
前端·后端·python
ezl1fe1 小时前
RAG 每日一技(九):你的RAG是“人工智障”还是“真智能”?聊聊RAG的评估
后端·算法
aiopencode1 小时前
iOS代码混淆工具怎么选 适合小团队的实用指南
后端
饮茶三千1 小时前
FreeMarker在保险电子保单/保函模板中的应用
前端·后端
狗头大军之江苏分军1 小时前
存钱 vs 投资 vs 提升自己:哪个才是打工人的“出路
前端·javascript·后端