软件设计师考试《综合知识》设计模式之——工厂模式与抽象工厂模式考点分析
软件设计师考试《综合知识》工厂模式与抽象工厂模式考点分析
1. 分值占比与考察趋势(75分制)
年份 | 题量 | 分值 | 占总分比例 | 核心考点 |
---|---|---|---|---|
2023 | 1 | 1 | 1.33% | 抽象工厂模式适用场景 |
2022 | 2 | 2 | 2.67% | 工厂方法 vs 抽象工厂区别 |
2021 | 1 | 1 | 1.33% | 工厂方法模式结构 |
2020 | 1 | 1 | 1.33% | 简单工厂模式缺陷 |
2019 | 1 | 1 | 1.33% | 抽象工厂模式优缺点 |
结论:
- 年均1.2题,分值1-2分(占比1.33%-2.67%)
- 模式对比是绝对高频考点(占60%)
- 简单工厂模式仅2020年考查1次
2. WWWH简述
What(是什么):
- 工厂方法:定义创建对象的接口,让子类决定实例化哪个类
- 抽象工厂:创建相关或依赖对象的家族,而无需指定具体类
Why(为什么):
- 工厂方法:解决单一产品的扩展问题(如多种Logger)
- 抽象工厂:解决产品族的兼容问题(如跨平台UI控件)
Where(用在哪):
模式 | 典型应用场景 |
---|---|
工厂方法 | 日志系统、数据库连接池 |
抽象工厂 | 跨平台UI库、游戏装备系统 |
How(怎么实现):
3. 考点详解
(1)工厂方法模式
基础概念:
- 核心角色:
- Creator(抽象创建者)
- ConcreteCreator(具体创建者,如FileLoggerFactory)
- Product(抽象产品)
UML示例:
对比简单工厂:
维度 | 工厂方法模式 | 简单工厂模式 |
---|---|---|
扩展性 | ✅ 符合开闭原则 | ❌ 需修改工厂类 |
复杂度 | 较高(需子类) | 低(集中判断) |
(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族)作为判断第一标准。