news 2026/7/31 2:09:41

GoF设计模式——抽象工厂模式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
GoF设计模式——抽象工厂模式

h5打开以查看

为什么需要抽象工厂模式?

在 GoF设计模式——工厂方法模式 中,工厂方法模式解决了"新增产品不改老代码"的问题:将创建职责分散到多个具体工厂,每个工厂只管一种产品,新增产品时只需新增工厂类。

但工厂方法模式有一个隐藏缺陷:每个工厂只管一个产品。现实中,产品往往是成套出现的——比如一个品牌的手机有高端机和中低端机,它们属于同一个"产品族",需要配套使用。产品族就是同一风格/品牌下的一组相关产品。古典风格的沙发必须搭配古典风格的椅子,不能混搭。如果用工厂方法模式(每种产品一个独立工厂):

// 工厂方法模式:沙发和椅子各自有独立的工厂,无法保证风格统一 SofaFactory sofaFactory = new ClassicalSofaFactory(); ChairFactory chairFactory = new ModernChairFactory(); // 搭错了! Sofa sofa = sofaFactory.create(); Chair chair = chairFactory.create(); // 结果:古典沙发配现代椅子,风格不统一

回头看,工厂方法模式只关注"单一产品"的扩展性,却忽略了"一族产品"的兼容性。抽象工厂模式就是来解决这个问题的——一个工厂负责一个产品族,同一工厂创建的所有产品风格/品牌一致

概念

抽象工厂模式(Abstract Factory)是一种创建型设计模式,核心思想是提供一个接口来创建一系列相关或相互依赖的对象,而无需指定它们具体的类

抽象工厂模式包含以下角色:

  • 抽象产品接口:定义产品的接口,产品族有多少种产品就有多少个抽象产品(本例有沙发、椅子两种)
  • 具体产品类:实现抽象产品接口,属于某个产品族(如古典沙发属于古典产品族)
  • 抽象工厂接口:声明一组创建产品的方法,每个方法对应一种产品
  • 具体工厂类:实现抽象工厂接口,一个具体工厂负责一个产品族(如古典工厂只创建古典风格的沙发和椅子)

类关系说明:两个具体工厂实现抽象工厂接口,四个具体产品各自实现对应的抽象产品接口。抽象工厂依赖两个抽象产品——每个具体工厂创建的产品都是同一族的。

核心要点:抽象工厂解决的核心问题是产品配套使用。一个工厂对应一个产品族,同一工厂创建的产品风格/品牌一定一致。如果产品之间没有配套约束,就不需要用这个模式。

实现

基础实现

抽象工厂的实现思想是用一个工厂接口声明创建一族产品的多个方法,每个具体工厂实现这些方法并返回同族的产品

// 抽象产品 A public interface AbstractProductA { public void operationA(); } // 抽象产品 B public interface AbstractProductB { public void operationB(); } // 具体产品 A1(产品族 1 的 A 类产品) public class ConcreteProductA1 implements AbstractProductA { @Override public void operationA() { System.out.println("ProductA1 的操作"); } } // 具体产品 A2(产品族 2 的 A 类产品) public class ConcreteProductA2 implements AbstractProductA { @Override public void operationA() { System.out.println("ProductA2 的操作"); } } // 具体产品 B1(产品族 1 的 B 类产品) public class ConcreteProductB1 implements AbstractProductB { @Override public void operationB() { System.out.println("ProductB1 的操作"); } } // 具体产品 B2(产品族 2 的 B 类产品) public class
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/31 2:09:10

SpringBoot+Vue智慧交通系统架构与大数据处理实践

1. 智慧交通分析系统的核心价值与行业背景城市交通拥堵已成为现代都市发展的主要痛点之一。根据国内主要城市交通运行监测数据,早晚高峰时段平均车速不足20公里/小时的路段占比超过35%。传统交通管理系统存在三大硬伤:数据采集滞后、分析维度单一、决策响…

作者头像 李华
网站建设 2026/7/31 2:06:41

恒压供水系统PLC控制与PID调节技术详解

1. 恒压供水系统概述恒压供水系统(无负压供水)是现代建筑供水领域的核心解决方案,它通过闭环控制技术实现管网压力的精准调节。这套系统由PLC控制器、变频器、压力传感器和水泵机组构成完整闭环,相比传统水箱供水可节能30%-50%&am…

作者头像 李华
网站建设 2026/7/31 2:02:04

2FAuth安全架构深度解析:从数据加密到RFC合规的实战指南

1. 项目概述:为什么我们需要重新审视2FAuth的安全性?最近在部署和审计内部的双因素认证系统时,我花了大量时间深入研究一个开源项目:2FAuth。它不仅仅是一个简单的TOTP令牌生成器,其设计背后蕴含了许多对安全性和合规性…

作者头像 李华
网站建设 2026/7/31 2:00:05

以下为你生成一个以“解决电脑运行卡顿问题”为例的符合要求的内容:

以下为你生成一个以“解决电脑运行卡顿问题”为例的符合要求的内容: 核心结论 解决电脑运行卡顿,可通过清理系统垃圾、优化启动项、升级硬件等方法,能有效提升电脑运行速度。 原理及操作步骤 清理系统垃圾 原理:系统在运行过程中会…

作者头像 李华
网站建设 2026/7/31 1:58:52

UE4/UE5项目设置窗口全局置顶插件开发实战

1. 项目概述:为什么我们需要“全局置顶”?在虚幻引擎(UE4/UE5)的日常开发中,无论是独立开发者还是团队协作,都绕不开一个高频操作:修改项目设置。从渲染质量、输入映射到平台打包选项&#xff0…

作者头像 李华