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

软件设计师考试《综合知识》设计模式之——工厂模式与抽象工厂模式考点分析

软件设计师考试《综合知识》工厂模式与抽象工厂模式考点分析


在这里插入图片描述

1. 分值占比与考察趋势(75分制)
年份题量分值占总分比例核心考点
2023111.33%抽象工厂模式适用场景
2022222.67%工厂方法 vs 抽象工厂区别
2021111.33%工厂方法模式结构
2020111.33%简单工厂模式缺陷
2019111.33%抽象工厂模式优缺点

结论

  • 年均1.2题,分值1-2分(占比1.33%-2.67%)
  • 模式对比是绝对高频考点(占60%)
  • 简单工厂模式仅2020年考查1次

2. WWWH简述

What(是什么)

  • 工厂方法:定义创建对象的接口,让子类决定实例化哪个类
  • 抽象工厂:创建相关或依赖对象的家族,而无需指定具体类

Why(为什么)

  • 工厂方法:解决单一产品的扩展问题(如多种Logger)
  • 抽象工厂:解决产品族的兼容问题(如跨平台UI控件)

Where(用在哪)

模式典型应用场景
工厂方法日志系统、数据库连接池
抽象工厂跨平台UI库、游戏装备系统

How(怎么实现)

工厂方法
<> Creator
ConcreteCreatorA --> ConcreteProductA
+factoryMethod()
抽象工厂
<> AbstractFactory
ConcreteFactory1 --> ProductA1
ConcreteFactory1 --> ProductB1
+createProductA()
+createProductB()

3. 考点详解
(1)工厂方法模式

基础概念

  • 核心角色
    • Creator(抽象创建者)
    • ConcreteCreator(具体创建者,如FileLoggerFactory)
    • Product(抽象产品)

UML示例

«interface»
Logger
+log()
FileLogger
+log()
«abstract»
LoggerFactory
+createLogger()
FileLoggerFactory
+createLogger()

对比简单工厂

维度工厂方法模式简单工厂模式
扩展性✅ 符合开闭原则❌ 需修改工厂类
复杂度较高(需子类)低(集中判断)
(2)抽象工厂模式

关键名词

  • 产品族:功能相关的产品集合(如Mac按钮/文本框)
  • 产品等级:同一抽象产品的不同实现(如Button有Win/Mac版)

结构对比

特征工厂方法抽象工厂
创建目标单一产品产品族
接口方法1个factoryMethod多个create方法
新增产品易(加子类)难(改接口)

4. 历年真题演练

真题1(2023年·抽象工厂)

需要开发支持Windows和Linux双平台的终端模拟器,应采用( )。
A. 适配器模式
B. 抽象工厂模式
C. 原型模式
D. 装饰器模式
答案:B(需管理多平台终端控件族)

真题2(2022年·对比题)

关于两种工厂模式错误的是( )。
A. 工厂方法通过继承实现扩展
B. 抽象工厂通过组合增加产品族
C. 工厂方法适合创建关联对象族
D. 抽象工厂接口包含多个创建方法
答案:C(应为抽象工厂的特性)

真题3(2021年·工厂方法)

工厂方法模式中,ConcreteCreator的作用是( )。
A. 定义产品接口
B. 决定实例化哪个具体产品
C. 统一管理所有产品
D. 实现产品功能
答案:B(核心职责)


5. 极简备考笔记
(1)三句话区分
1. 工厂方法:一个工厂子类 → 生产一种产品(如MySQL连接器工厂)  
2. 抽象工厂:一个工厂子类 → 生产一套产品(如Mac控件工厂)  
3. 简单工厂:if-else集中生产 → 违反开闭原则
(2)高频考点速查
题干关键词正确答案典型错误选项
“多种数据库连接”工厂方法抽象工厂
“跨平台UI控件库”抽象工厂建造者模式
“动态新增日志类型”工厂方法简单工厂
(3)必背对比口诀
【工厂方法】  
子类工厂造单品,扩展只需新子类  
【抽象工厂】  
一套产品捆绑卖,新增产品要改接口
(4)2024年预测
  • Spring框架中的BeanFactory实现原理
  • 抽象工厂在微服务配置中心的应用

附:冲刺策略

① 重点掌握模式对比(50分钟):做近3年所有对比真题  
② 理解产品族概念(30分钟):通过UI库/游戏装备案例  
③ 放弃:简单工厂的代码实现(近年未考具体实现)  

:该考点易混淆,建议用"产品维度"(单一vs族)作为判断第一标准。

http://www.lryc.cn/news/2380105.html

相关文章:

  • 轻量级离线版二维码工具的技术分析与开发指南
  • 中级网络工程师知识点4
  • 机器学习--特征工程具体案例
  • LeetCode 每日一题 2025/5/12-2025/5/18
  • Unreal 从入门到精通之SceneCaptureComponent2D实现UI层3D物体360°预览
  • 电机控制杂谈(25)——为什么对于一般PMSM系统而言相电流五、七次谐波电流会比较大?
  • 多模态大语言模型arxiv论文略读(七十八)
  • 项目中把webpack 打包改为vite 打包
  • 【C语言】易错题 经典题型
  • 哈夫曼编码:数据压缩的优雅艺术
  • 说一说Node.js高性能开发中的I/O操作
  • 扫描网络内所有设备的IP地址
  • web3 前端常见错误类型以及错误捕获处理
  • 应用层协议简介:以 HTTP 和 MQTT 为例
  • LeetCode 39. 组合总和 LeetCode 40.组合总和II LeetCode 131.分割回文串
  • 如何在 Windows 11 或 10 上安装 Fliqlo 时钟屏保
  • Linux云计算训练营笔记day08(MySQL数据库)
  • 计算机视觉与深度学习 | matlab实现EMD-CNN-LSTM时间序列预测(完整源码、数据、公式)
  • 【vue】【环境配置】项目无法npm run serve,显示node版本过低
  • 国芯思辰| 轮速传感器AH741对标TLE7471应用于汽车车轮速度感应
  • 鸿蒙PC操作系统:从Linux到自研微内核的蜕变
  • 小程序弹出层/抽屉封装 (抖音小程序)
  • 深入理解动态规划:从斐波那契数列到最优子结构
  • 基于Linux环境实现Oracle goldengate远程抽取MySQL同步数据到MySQL
  • 电子电路原理第十六章(负反馈)
  • Go语言数组的定义与操作 - 《Go语言实战指南》
  • 物联网简介:万物互联的未来图景
  • 命令拼接符
  • 【通用智能体】Lynx :一款基于终端的纯文本网页浏览器
  • 51单片机的lcd12864驱动程序