当前位置: 首页 > java >正文

四.抽象工厂模式

一.抽象工厂模式的定义

提供一个接口用于创建‌相关或依赖对象的家族‌,而无需指定具体类。客户端通过抽象接口获取对象,与具体实现解耦。

  • 强调‌产品族一致性‌
  • 与工厂方法模式区别:‌抽象工厂生产多类产品,工厂方法生产单类产品

二.核心结构

角色职责
抽象工厂声明创建产品族的方法
具体工厂实现接口,生成特定产品族对象
抽象产品定义产品接口
具体产品实现产品接口

三.案例

        通俗来讲,抽象工厂模式是多个工厂方法模式组合起来,是它的升级版。它定义了一个工厂接口或抽象类,这个工厂可以创建一组相关或依赖对象的家族(比如;发动机、轮胎等等组合起来才是一辆汽车),每个具体工厂实现这个接口时,都会为这一组产品提供各自的实现。这组产品中的每一个对象,都可以看作是一个独立的“工厂方法模式”的产物。

工厂方法模式适用于单一产品的创建,抽象工厂模式适用于一组相关产品的创建。

// 抽象产品:发动机
interface Engine {void start();
}// Tesla专用发动机
class ElectricEngine implements Engine {public void start() { System.out.println("特斯拉电机启动 - 无声运转"); }
}// Toyota专用发动机
class CombustionEngine implements Engine {public void start() { System.out.println("丰田发动机启动 - 引擎轰鸣"); }
}// 抽象产品:轮胎
interface Tire {void grip();
}// Tesla专用轮胎
class SportTire implements Tire {public void grip() { System.out.println("运动轮胎 - 赛道级抓地力"); }
}// Toyota专用轮胎
class AllWeatherTire implements Tire {public void grip() { System.out.println("全气候轮胎 - 全天候安全保障"); }
}// 抽象工厂:生产配套产品族
interface CarFactory {Engine createEngine();  // 不再单一!Tire createTire();      // 多产品协同生产
}// Tesla产品族工厂
class TeslaFactory implements CarFactory {public Engine createEngine() {return new ElectricEngine();  //电动车专用电机}public Tire createTire() {return new SportTire();       //性能轮胎}
}// Toyota产品族工厂
class ToyotaFactory implements CarFactory {public Engine createEngine() {return new CombustionEngine(); //燃油发动机}public Tire createTire() {return new AllWeatherTire();   //全天候轮胎}
}public class CarAssembly {public static void main(String[] args) {// 根据需求选择完整产品族CarFactory factory = selectFactory("eco"); // 配套产品自动组合(无需手动匹配)Engine engine = factory.createEngine();Tire tire = factory.createTire();// 确保兼容性:Tesla电机不会配错丰田轮胎engine.start();tire.grip();}private static CarFactory selectFactory(String mode) {return "eco".equals(mode) ? new TeslaFactory() :   // 整套电动车方案new ToyotaFactory();   // 整套燃油车方案}
}

四.应用场景

抽象工厂模式和工厂方法模式的应用场景一直,但它们适用的“粒度”和“复杂度”不同。

例如:多支付渠道系统

工厂方式模式可以创建支付接口。但是如果需要支付接口、回调处理器、日志记录器时,就需要抽象工厂模式。

💡 如果本文对你有帮助,点击右上角【订阅专栏】或左上角关注我  
🔔 完整的23中设计模式干货,第一时间推送给你!
🔔 有什么问题也可以在评论区讨论🤝🤝🤝
http://www.xdnf.cn/news/12771.html

相关文章:

  • opencv学习笔记2:卷积、均值滤波、中值滤波
  • C语言指针与数组sizeof运算深度解析:从笔试题到内存原理
  • 数学建模期末速成 主成分分析的基本步骤
  • 什么是 Ansible 主机和组变量
  • 如何优化React Native应用以适配HarmonyOS5?
  • python打卡训练营打卡记录day48
  • VLM引导的矢量草图生成AutoSketch
  • 数据库入门:从原理到应用
  • Windows之官方Sysinternals工具集
  • ubuntu 系统分区注意事项
  • 36 C 语言内存操作函数详解:memset、memcpy、memccpy、memmove、memcmp、memchr
  • 开启二进制日志 MySQL显示关闭,关闭二进制日志 MySQL恢复正常
  • 全球人工智能技术大会(GAITC 2025):技术前沿与产业融合的深度交响
  • Prompt工程学习之思维树(TOT)
  • C++课设:从零开始打造影院订票系统
  • .net 可以调试的Windows服务框架Topshelf
  • ClickHouse 25.3 json列类型使用示例
  • 基于自适应虚拟谐波阬的光储VSG并网电流谐波抑制模型
  • 归并排序:分治思想的高效排序
  • UDP 与 TCP 的区别是什么?
  • CppCon 2015 学习:Memory and C++ debugging at Electronic Arts
  • day6 cpp:c中处理字符串,c++string
  • 第二十周:Redis(二)
  • 条件语句易错点
  • Android 集成 Firebase 指南
  • 如何写一篇基于Spring Boot + Vue + 微信小程序的软件的接口文档
  • Tavily 技术详解:为大模型提供实时搜索增强的利器
  • 行为设计模式之Iterator(迭代器)
  • Ubuntu20.04中MySQL的安装和配置
  • 【iOS】JSONModel源码学习