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

核心思想

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

结构

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

与其他模式的关系

相关推荐
文丑颜不良啊2 分钟前
LeetCode1581~1600题目解析
java·leetcode
香蕉大香蕉(06敬畏市场)2 分钟前
MySQL 单点详解(06)
java·数据库·mysql·博客·实习
武子康11 分钟前
同一台 ESP32,GSM 能消回声,VoIP 为什么不行?
人工智能·后端·agent
用户693717500138415 分钟前
AI 能写代码,但工程架构还是应该由人来定
前端·后端
lqbzlll15 分钟前
Spring Boot 开启虚拟线程后接口反而变慢了?4 个排查方向和对应修法
java·spring boot·后端
七夜zippoe20 分钟前
LangChain4j vs Spring AI:Java AI 框架怎么选(对比表)
java·人工智能·spring·ai·langchain4j
悠仁さん25 分钟前
【C++】set map 使用
java·前端·c++
回家路上绕了弯29 分钟前
让 AI 成为团队的共同能力
后端
70后写java的老码农37 分钟前
一个 starter 通吃 9 家主流大模型:Spring Boot 3.x + Spring AI 1.x 极简落地
后端
yuniko-n1 小时前
【JUC】Thread 内存泄露
java