考试分值:设计模式固定4分
一、设计模式分类总览
设计模式分为三大类,共23种模式:
| 类型 | 数量 | 核心思想 |
|---|---|---|
| 创建型 | 5种 | 关注对象的创建过程,将对象的创建与使用分离 |
| 结构型 | 7种 | 关注类和对象的组合,处理类和对象的组合关系 |
| 行为型 | 11种(含责任链、备忘录) | 关注对象之间的通信和职责分配 |
二、创建型模式(5种)
创建型模式抽象了对象的创建过程,将对象的创建与使用分离。
| 模式 | 英文名 | 意图关键词 |
|---|---|---|
| 简单工厂 | Simple Factory | 根据参数返回不同实例 |
| 工厂方法 | Factory Method | 子类决定实例化哪个类 |
| 抽象工厂 | Abstract Factory | 创建一系列相关对象 |
| 单例 | Singleton | 保证仅有一个实例 |
| 建造者 | Builder | 构建与表示分离 |
| 原型 | Prototype | 通过复制创建新对象 |
三、各模式详解
3.1 简单工厂模式(Simple Factory)—— 了解
定义:定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。
三类角色:
| 角色 | 说明 |
|---|---|
| 工厂(核心) | 负责实现创建所有产品的内部逻辑,工厂类可以被外界直接调用,创建所需的对象 |
| 抽象产品 | 工厂类所创建的所有对象的父类,封装了产品对象的公共方法,所有的具体产品为其子类对象 |
| 具体产品 | 简单工厂模式的创建目标,所有被创建的对象都是某个具体类的实例,要实现抽象产品中声明的抽象方法 |
3.2 工厂方法模式(Factory Method)
意图:定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。
核心要点:
- 定义创建对象的接口(抽象工厂)
- 由子类决定实例化哪个具体类
- 将实例化延迟到子类
3.3 抽象工厂模式(Abstract Factory)
意图:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。
核心要点:
- 创建的是一系列相关或相互依赖的对象
- 不需要指定具体的类
- 适用于需要创建产品族的场景
工厂方法 vs 抽象工厂:
- 工厂方法:创建一种产品
- 抽象工厂:创建一族产品
3.4 单例模式(Singleton)
意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
核心要点:
- 一个类仅有一个实例
- 提供全局访问点
- 常见实现方式:饿汉式、懒汉式
适用场景:
- 全局配置管理器
- 数据库连接池
- 日志记录器
3.5 建造者模式(Builder / 生成器)
意图:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
核心要点:
- 构建过程与表示分离
- 同样的构建过程可以创建不同的表示
- 适用于创建复杂对象的场景
3.6 原型模式(Prototype)
意图:用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。
核心要点:
- 通过**复制(克隆)**原型来创建新对象
- 避免重复创建相似对象的开销
- Java中通过实现
Cloneable接口实现
四、创建型模式对比总结
| 模式 | 核心思想 | 适用场景 |
|---|---|---|
| 简单工厂 | 一个工厂根据参数创建不同产品 | 产品种类较少,创建逻辑简单 |
| 工厂方法 | 定义接口,子类决定实例化哪个类 | 需要灵活扩展产品种类 |
| 抽象工厂 | 创建一系列相关对象 | 需要创建产品族 |
| 单例 | 保证仅有一个实例 | 全局唯一对象 |
| 建造者 | 构建与表示分离 | 创建复杂对象 |
| 原型 | 通过复制原型创建新对象 | 创建对象开销较大 |
五、考试重点
- 必背各模式的意图描述(考试常考模式识别)
- 工厂方法 vs 抽象工厂的区别
- 单例模式的特点和应用场景
- 简单工厂的三类角色:工厂、抽象产品、具体产品
评论