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

核心思想

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

结构

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

与其他模式的关系

相关推荐
一只小小Java34 分钟前
Naocs本地部署&安装3.2.3+Spring boot 3.2.0
java·spring boot·后端·nacos
JL1540 分钟前
Spring Boot vs Gin:Java 人搭第一个 Go REST API
java·spring boot·gin
神明不懂浪漫1 小时前
【第七章】Java中的常用类
java·开发语言·前端·经验分享·笔记
码兄科技9 小时前
实战:基于Spring Boot + UniApp的地理信息小程序开发
spring boot·后端·uni-app
腾讯云云开发10 小时前
腾讯云 CloudBase 登上 WAIC:我们为 Agent 重新设计了云的生产线
后端
Jelena1577958579210 小时前
电商运营分析数据比价接口实战:多平台价格监控与智能决策系统
java·大数据·数据库
星栈11 小时前
从装一堆工具到看懂 Node 工程化思维:我的项目复盘记录
后端·node.js
65岁退休Coder11 小时前
LangChain v1.3.4 笔记 - 05 Agent 上下文记忆
后端
颜酱11 小时前
04 | 召回前置准备:搭好召回所需的四个数据库
前端·人工智能·后端
JaneConan11 小时前
鸿蒙 韶非 UI 系列:能力调用 startAbilityForResult,跳能力拿回参,鸿蒙能力路由入门
后端·harmonyos