软件设计师考试《综合知识》创建型设计模式考点分析
软件设计师考试《综合知识》创建型设计模式考点分析
1. 分值占比与考察趋势(75分制)
模式名称 | 近5年题量 | 分值占比 | 高频考察点 | 最新趋势 |
---|---|---|---|---|
抽象工厂模式 | 4 | 5.33% | 产品族创建/跨平台应用 | 结合微服务配置考查(2023) |
工厂方法模式 | 5 | 6.67% | 单一产品扩展/日志系统 | 与IoC容器结合(2022) |
单例模式 | 6 | 8% | 线程安全实现/应用场景 | 双重检查锁优化(2023) |
生成器模式 | 3 | 4% | 复杂对象分步构建 | 与链式调用结合(2021) |
原型模式 | 2 | 2.67% | 深拷贝实现/性能优化 | 克隆与new的性能对比(2022) |
结论:
- 单例模式考频最高(年均1.2题),线程安全实现是重点
- 工厂相关模式合计占12%,侧重模式对比和适用场景
- 生成器/原型属于低频考点,但近3年均有考查
- 新趋势:设计模式与框架技术的结合应用(如Spring的Bean作用域)
2. WWWH简述
模式 | What | Why | Where | How |
---|---|---|---|---|
抽象工厂 | 创建产品家族 | 保证产品兼容性 | 跨平台UI/游戏装备系统 | 定义抽象接口,子工厂实现产品族 |
工厂方法 | 延迟实例化到子类 | 支持开闭原则扩展 | 日志系统/插件架构 | 父类定义接口,子类决定实例化 |
单例模式 | 确保类只有一个实例 | 全局访问点/资源节约 | 配置管理/线程池 | 私有构造+静态方法+线程安全控制 |
生成器模式 | 分步构建复杂对象 | 解耦构造过程与表示 | XML解析/复杂表单生成 | Director指挥Builder逐步构建 |
原型模式 | 克隆现有对象 | 避免重复初始化开销 | 游戏场景复制/缓存模板 | 实现Cloneable接口+重写clone() |
3. 考点详解
(1)单例模式(最常考)
关键概念:
- 饿汉式:类加载即初始化(线程安全但可能浪费资源)
- 懒汉式:首次调用时初始化(需同步控制)
// 双重检查锁实现(考点!)
public class Singleton {private volatile static Singleton instance;private Singleton() {}public static Singleton getInstance() {if (instance == null) {synchronized (Singleton.class) {if (instance == null) {instance = new Singleton();}}}return instance;}
}
对比表:
实现方式 | 线程安全 | 懒加载 | 性能 | 适用场景 |
---|---|---|---|---|
饿汉式 | ✅ | ❌ | 最优 | 初始化耗时短的场景 |
同步方法懒汉式 | ✅ | ✅ | 差 | 不推荐使用 |
双重检查锁 | ✅ | ✅ | 较好 | 高频调用场景 |
静态内部类 | ✅ | ✅ | 优 | 标准实现方案 |
(2)工厂方法 vs 抽象工厂
初学者易混淆点:
graph TDA[需要创建对象] --> B{产品数量?}B -->|单一产品| C[工厂方法]B -->|产品族| D[抽象工厂]C --> E[扩展方式:新增子类]D --> F[扩展方式:修改接口]
(3)生成器模式
经典结构:
(4)原型模式
深拷贝实现:
class Prototype implements Cloneable {private List<String> data;@Overridepublic Prototype clone() {Prototype copy = (Prototype)super.clone();copy.data = new ArrayList<>(this.data); // 关键点:集合对象也需拷贝return copy;}
}
4. 历年真题演练
真题1(2023·单例模式):
需要实现全局配置管理器,在多线程环境下既要保证线程安全又要避免同步开销,应使用( )。
A. 饿汉式单例
B. 同步方法懒汉式
C. 双重检查锁单例
D. 枚举单例
答案:C(兼顾线程安全与性能)
真题2(2022·生成器模式):
关于生成器模式错误的是( )。
A. 将复杂对象的构建与表示分离
B. 可以通过不同生成器创建不同表现对象
C. 适合创建简单不可变对象
D. Director控制构建过程
答案:C(应为复杂可变对象)
真题3(2021·原型模式):
原型模式通过clone()方法创建对象比直接new的优势是( )。
A. 避免执行构造函数
B. 节省初始化资源开销
C. 自动实现深拷贝
D. 保证线程安全
答案:B(核心优势是复用已有对象状态)
5. 极简备考笔记
(1)模式速记口诀
【单例】
私有构造静态存,双重检查锁线程
【工厂】
单品用方法,家族抽象上
【生成器】
指挥者管步骤,建造者做零件
【原型】
克隆省资源,注意深拷贝
(2)高频考点对照表
题干关键词 | 对应模式 | 判断要点 |
---|---|---|
“全局唯一”、“配置中心” | 单例模式 | 强调实例唯一性 |
“跨平台控件”、“套装” | 抽象工厂 | 产品族概念 |
“分步骤构建”、“链式调用” | 生成器模式 | 构建过程复杂性 |
“对象拷贝”、“缓存模板” | 原型模式 | 克隆现有对象 |
(3)2024年重点预测
- Spring框架中的设计模式应用(如Bean作用域与单例模式)
- 原型模式在对象池技术中的应用
- 生成器模式与Lombok的@Builder注解对比
附:冲刺时间分配建议
① 单例模式(60分钟):重点掌握4种实现方式的对比
② 工厂系列(40分钟):通过UML图理解产品维度差异
③ 生成器/原型(30分钟):各做2道真题掌握典型应用
④ 放弃:创建型模式的混合使用场景(近5年仅考1次)
注:创建型模式占《设计模式》考点的35%,建议优先掌握单例和工厂系列。