一、引言
创建型设计模式是软考软件设计师面向对象技术模块的核心考点,在历年考试中平均分值占比 4-6 分,题型覆盖选择题、案例分析题,是必须熟练掌握的核心知识点。设计模式是针对软件开发中反复出现的特定场景,经过实践验证的最佳解决方案,其核心目标是提升代码的可复用性、可维护性和扩展性,降低系统耦合度。
设计模式包含四个核心要素:模式名称、问题场景、解决方案、应用效果。按照功能目的可分为三类:创建型模式(聚焦对象创建过程)、结构型模式(聚焦类与对象的组合关系)、行为型模式(聚焦对象间的交互与职责分配)。本文将系统讲解五种创建型模式的核心原理、实现机制、适用场景、软考考点及记忆方法,帮助考生建立完整的创建型模式知识体系。

设计模式分类体系图,展示创建型、结构型、行为型三大类的关系及五种创建型模式的位置
二、创建型模式核心原理
创建型模式的核心思想是将对象的创建与使用分离,封装对象创建的复杂逻辑,使系统符合单一职责原则,降低模块间的耦合度,提升对象创建的灵活性和可扩展性。五种创建型模式分别从实例唯一性、创建职责分配、系列对象创建、对象复制、复杂对象构建五个维度解决不同场景下的对象创建问题。
2.1 单例模式(Singleton)
单例模式的定义是保证一个类在系统运行过程中仅有一个实例,并提供一个全局统一的访问点。
核心原理:通过私有化类的构造方法,禁止外部直接实例化对象,同时在类内部维护一个静态的唯一实例,提供静态公共方法供外部获取该实例。根据实例初始化时机可分为饿汉式和懒汉式两种实现:饿汉式在类加载时就完成实例初始化,线程安全但可能造成资源浪费;懒汉式在首次调用获取方法时才初始化,需要通过双重检查锁定、静态内部类等机制保证线程安全。
关键技术参数:实例唯一性的实现必须满足多线程环境下的线程安全,避免并发场景下生成多个实例;序列化场景下需要重写 readResolve 方法,防止反序列化生成新实例。
适用场景:系统中要求某类只能存在一个实例的场景,如线程池、缓存管理器、日志对象、配置管理器、对话框组件等。
记忆口诀:唯一实例全局访
2.2 工厂方法模式(Factory Method)
工厂方法模式的定义是定义一个用于创建对象的抽象工厂接口,让具体工厂子类决定实例化哪一个具体产品类,将产品的实例化过程延迟到子类执行。
核心原理:该模式包含四个核心角色:抽象产品(定义产品的公共接口)、具体产品(实现抽象产品接口的具体类)、抽象工厂(声明创建产品的抽象方法)、具体工厂(实现抽象工厂方法,返回具体产品实例)。每个具体工厂对应一个具体产品,新增产品时只需新增对应的具体工厂类,无需修改原有工厂代码,符合开闭原则。
关键机制:通过抽象层将产品创建的职责下放到子类,客户端仅依赖抽象工厂和抽象产品,无需知道具体产品的类名和创建细节。
适用场景:创建者无需知道所需创建的具体产品类;希望将产品的创建职责分配给多个工厂子类,由子类决定具体实例化的产品类型。
记忆口诀:子类决定实例化
2.3 抽象工厂模式(Abstract Factory)
抽象工厂模式的定义是提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类,核心是实现产品族的统一创建。
核心原理:该模式包含四个核心角色:抽象产品族(多个相关抽象产品的集合)、具体产品族(多个相关具体产品的实现)、抽象工厂(声明创建多个抽象产品的方法)、具体工厂(实现抽象工厂的多个方法,返回同一产品族的多个具体产品实例)。与工厂方法的核心区别是:工厂方法针对单一产品等级结构(一个工厂创建一种产品),抽象工厂针对多个产品等级结构(一个工厂创建同一系列的多种产品)。
关键约束:同一具体工厂创建的产品必须属于同一个产品族,不同产品族的产品不能混用。
适用场景:系统需要独立于产品的创建、组合和表示;系统需要支持多个产品族的动态切换;需要强调一系列相关产品的联合使用约束,如跨平台 UI 控件库、多数据库访问组件等。
记忆口诀:系列对象同族创

工厂方法与抽象工厂模式对比示意图,展示产品等级结构与产品族的关系
2.4 原型模式(Prototype)
原型模式的定义是用原型实例指定创建对象的种类,通过复制(克隆)原型实例来创建新的对象,避免重复执行复杂的对象初始化过程。
核心原理:该模式包含三个核心角色:抽象原型(声明克隆方法的接口)、具体原型(实现克隆方法的具体类)、客户端(通过调用原型的克隆方法创建新对象)。根据克隆的深度可分为浅克隆和深克隆:浅克隆仅复制对象的基本数据类型属性,引用类型属性仍指向原有对象;深克隆会递归复制所有引用类型的属性,生成完全独立的新对象。
关键技术点:克隆方法的实现需满足复制对象与原对象的属性一致,且修改新对象不会影响原对象的状态;Java 中可通过实现 Cloneable 接口、序列化反序列化等方式实现克隆。
适用场景:需要实例化的类在运行时动态指定;对象初始化过程复杂、资源消耗高,希望通过复制已有对象提升创建效率;避免创建与产品类平行的工厂类层次;一个类的实例只有少数几种状态组合,可预先创建对应原型,需要时直接克隆。
记忆口诀:原型复制快速建
2.5 生成器模式(Builder)
生成器模式的定义是将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示,核心是分步构建复杂对象。
核心原理:该模式包含四个核心角色:产品(要创建的复杂对象,包含多个组成部分)、抽象生成器(声明构建产品各个组成部分的抽象方法,以及返回最终产品的方法)、具体生成器(实现抽象生成器的方法,完成产品各个部分的具体构建,维护当前构建的产品实例)、指挥者(调用生成器的构建方法,按照固定顺序完成复杂对象的构建,隔离客户端与构建过程)。
关键优势:将复杂对象的构建步骤与最终表示解耦,相同的构建步骤可以通过不同的具体生成器生成不同的产品实例,新增产品类型时只需新增具体生成器,无需修改指挥者的构建流程。
适用场景:创建复杂对象的算法独立于该对象的组成部分及装配方式;构造过程允许被构造的对象有不同的表示,如不同配置的计算机组装、不同格式的文档生成等。
记忆口诀:构建表示相分离

五种创建型模式核心特征对比表,包含定义、核心角色、适用场景、优缺点
三、创建型模式实现方法
3.1 单例模式实现要点
实现步骤分为三步:第一步私有化构造方法,禁止外部通过 new 关键字实例化;第二步在类内部定义静态私有实例变量;第三步提供静态公共方法返回唯一实例。
注意事项:懒汉式实现必须处理多线程并发问题,双重检查锁定实现需要将实例变量用 volatile 修饰,禁止指令重排序;序列化场景下需重写 readResolve 方法,直接返回已有实例;避免通过反射破坏单例,可在构造方法中添加判断,若实例已存在则抛出异常。
3.2 抽象工厂模式实现要点
实现步骤分为四步:第一步定义抽象产品接口,声明产品的公共方法;第二步实现多个具体产品类,属于不同的产品族;第三步定义抽象工厂接口,声明创建各个抽象产品的方法;第四步实现具体工厂类,每个工厂对应一个产品族,创建该族下的所有具体产品。
注意事项:产品族扩展时需要修改抽象工厂接口及所有具体工厂的实现,不符合开闭原则,因此抽象工厂适用于产品族结构稳定、产品等级结构可能扩展的场景。
3.3 生成器模式实现要点
实现步骤分为四步:第一步定义复杂产品类,明确各个组成部分;第二步定义抽象生成器接口,声明构建各个组成部分的方法和获取产品的方法;第三步实现具体生成器类,完成各个部分的具体构建;第四步定义指挥者类,编排构建步骤的顺序,调用生成器的方法完成产品构建。
注意事项:指挥者的构建流程是固定的,不同生成器仅修改各个组成部分的具体实现,若构建流程发生变化则需要修改指挥者代码。

生成器模式实现流程图,展示指挥者、生成器、产品之间的交互顺序
四、软考典型考点与真题解析
创建型模式在软考中主要考察三个方向:模式的核心定义与适用场景、不同模式的适用场景辨析、模式在案例中的选型判断。
4.1 高频考点汇总
单例模式:核心特征(唯一实例、全局访问)、实现方式的线程安全判断、适用场景识别。
工厂方法与抽象工厂的区别:工厂方法解决单个产品的创建,抽象工厂解决产品族的创建,当题目中出现 “系列对象”“成套使用”“跨平台切换” 等关键词时优先考虑抽象工厂。
原型模式:核心特征(克隆对象)、适用场景(运行时动态指定类、对象创建成本高)。
生成器模式:核心特征(构建与表示分离、分步构建复杂对象)、适用场景(相同构建过程生成不同表示)。
4.2 典型真题解析
概念题:以下哪种设计模式确保一个类只有一个实例,并提供对其的全局访问点?
A. 工厂方法 B. 抽象工厂 C. 单例 D. 原型
答案:C。解析:单例模式的核心定义就是保证类仅有一个实例并提供全局访问点,符合题目描述。
情景题:某系统需要支持多种不同风格的 UI 控件(如按钮、文本框),且这些控件需要成套使用(例如 “Windows 风格” 按钮配 “Windows 风格” 文本框)。为了能够方便地切换整个控件族,最适合采用( )模式。
A. 工厂方法 B. 抽象工厂 C. 生成器 D. 原型
答案:B。解析:题目中明确要求创建一系列相关的对象(同风格的按钮、文本框),且需要成套切换,属于产品族创建场景,符合抽象工厂的适用范围。
情景题:某系统中创建订单对象需要经过参数校验、库存扣减、优惠券核销、日志记录等多个复杂步骤,且不同类型订单的步骤一致但每个步骤的具体实现不同,最适合采用( )模式。
A. 工厂方法 B. 抽象工厂 C. 生成器 D. 原型
答案:C。解析:题目中订单是复杂对象,构建过程固定但各个步骤的实现不同,符合生成器模式 “构建与表示分离,相同构建过程生成不同表示” 的特征。
五、总结与备考建议
5.1 核心知识点总结
创建型模式的核心目标是实现对象创建与使用的分离,降低系统耦合度。
单例模式解决实例唯一性问题,适用于全局唯一的资源管理场景。
工厂方法模式实现单个产品的创建职责下放,由子类决定具体实例化的产品。
抽象工厂模式实现产品族的统一创建,保证系列对象的一致性。
原型模式通过复制已有对象创建新实例,提升复杂对象的创建效率。
生成器模式实现复杂对象的分步构建,支持相同流程生成不同表示。
5.2 软考备考建议
准确记忆五种创建型模式的定义、核心特征、适用场景,可通过本文提供的记忆口诀快速区分。
重点掌握工厂方法与抽象工厂的区别、生成器与工厂模式的适用场景差异,这是选择题的高频易混考点。
案例分析题中,若考察设计模式选型,优先从题目描述中提取关键词:“唯一实例” 对应单例、“系列产品成套使用” 对应抽象工厂、“复杂对象分步构建” 对应生成器、“动态创建类且避免工厂层次” 对应原型。
结合代码示例理解各模式的实现逻辑,能够根据场景描述画出对应的 UML 类图,掌握各个角色的职责和关系。
5.3 实践应用建议
实际开发中,避免过度使用设计模式,只有当对象创建逻辑复杂、未来需要扩展时才引入对应的创建型模式,防止增加不必要的系统复杂度。
单例模式优先选择饿汉式或静态内部类实现,避免手动处理线程安全问题。
抽象工厂模式适用于产品族稳定的场景,若产品族可能频繁变更则不建议使用。
下一篇我们将继续讲解结构型设计模式,系统梳理类与对象的组合关系设计方法,以及对应的软考考点。




