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

发布于:2025-05-15 ⋅ 阅读:(22) ⋅ 点赞:(0)

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


在这里插入图片描述

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(怎么实现)

工厂方法
<> 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族)作为判断第一标准。


网站公告

今日签到

点亮在社区的每一天
去签到