MD 更新:未知

设计模式总结

概述

设计模式是解决特定问题的一般性可重用方案。设计模式分为三大类:创建型、结构型和行为型。

三种设计模式类型的区别

1. 创建型模式(Creational Patterns)

  • 关注点:对象的创建过程
  • 目的:将对象的创建与使用分离,提高系统灵活性和可复用性
  • 核心问题:如何创建对象?创建哪些对象?如何组合对象?
  • 适用场景:需要动态决定创建哪些对象,或对象创建过程复杂时

2. 结构型模式(Structural Patterns)

  • 关注点:类或对象的组合结构
  • 目的:将类或对象组合成更大的结构,保持结构的灵活性和效率
  • 核心问题:如何组合类或对象?如何构建更大的结构?
  • 适用场景:需要组合多个类或对象以实现新功能时

3. 行为型模式(Behavioral Patterns)

  • 关注点:对象之间的交互和职责分配
  • 目的:定义对象之间的通信方式,控制复杂的流程控制
  • 核心问题:对象之间如何交互?如何分配职责?如何控制流程?
  • 适用场景:需要定义对象之间的复杂交互或算法时

对比表格

类型关注点目的核心问题
创建型对象创建创建与使用分离如何创建对象?
结构型组合结构构建更大结构如何组合类或对象?
行为型交互职责定义通信方式对象之间如何交互?

创建型设计模式(5种)

1. 单例模式(Singleton)

  • 定义:确保一个类只有一个实例,并提供全局访问点
  • 特点:私有构造函数、静态实例、全局访问
  • 应用:配置管理器、日志记录器、数据库连接池
  • 示例Runtime.getRuntime()

2. 原型模式(Prototype)

  • 定义:通过复制现有实例来创建新实例
  • 特点:克隆对象、避免重复初始化
  • 应用:创建成本高的对象、需要相似对象时
  • 示例Object.clone()

3. 工厂方法模式(Factory Method)

  • 定义:定义创建对象的接口,让子类决定实例化哪个类
  • 特点:将对象创建延迟到子类
  • 应用:需要创建多种类型的对象时
  • 示例Collection.iterator()

4. 抽象工厂模式(Abstract Factory)

  • 定义:提供创建一系列相关或相互依赖对象的接口
  • 特点:创建产品族、保证产品兼容性
  • 应用:需要创建多个相关对象时
  • 示例:GUI工具包(Windows风格、Mac风格)

5. 构建器模式(Builder)

  • 定义:将复杂对象的构建与表示分离
  • 特点:分步构建、相同的构建过程不同表示
  • 应用:创建复杂对象、需要多种表示时
  • 示例StringBuilder

结构型设计模式(7种)

1. 代理模式(Proxy)

  • 定义:为其他对象提供代理以控制对这个对象的访问
  • 特点:间接访问、控制权限
  • 应用:远程代理、虚拟代理、保护代理
  • 示例java.lang.reflect.Proxy

2. 适配器模式(Adapter)

  • 定义:将一个类的接口转换成客户希望的另一个接口
  • 特点:接口转换、兼容性
  • 应用:使用旧接口、第三方库集成
  • 示例java.util.Arrays.asList()

3. 装饰模式(Decorator)

  • 定义:动态地给对象添加额外职责
  • 特点:灵活扩展、不改变原有结构
  • 应用:功能增强、组合多种功能
  • 示例java.io流包装

4. 桥接模式(Bridge)

  • 定义:将抽象部分与实现部分分离,使它们都可以独立变化
  • 特点:分离抽象和实现、独立扩展
  • 应用:多维度变化、避免类爆炸
  • 示例:JDBC驱动

5. 外观模式(Facade)

  • 定义:为子系统中的一组接口提供统一的高层接口
  • 特点:简化接口、降低耦合
  • 应用:复杂系统简化、分层架构
  • 示例javax.faces.context.FacesContext

6. 享元模式(Flyweight)

  • 定义:运用共享技术有效地支持大量细粒度的对象
  • 特点:共享对象、节省内存
  • 应用:大量相似对象、创建成本高
  • 示例String常量池

7. 组合模式(Composite)

  • 定义:将对象组合成树形结构以表示”部分-整体”的层次结构
  • 特点:统一处理单个对象和组合对象
  • 应用:树形结构、文件系统
  • 示例java.awt.Container

行为型设计模式(11种)

1. 模板方法模式(Template Method)

  • 定义:定义算法骨架,将某些步骤延迟到子类
  • 特点:算法骨架固定、步骤可变
  • 应用:框架设计、算法重构
  • 示例java.util.AbstractList

2. 策略模式(Strategy)

  • 定义:定义一系列算法,将每个算法封装起来
  • 特点:算法可互换、避免条件语句
  • 应用:多种算法选择、运行时切换
  • 示例java.util.Comparator

3. 命令模式(Command)

  • 定义:将请求封装为对象
  • 特点:请求参数化、支持撤销
  • 应用:菜单操作、事务系统
  • 示例java.lang.Runnable

4. 责任链模式(Chain of Responsibility)

  • 定义:将请求的发送者和接收者解耦
  • 特点:多个对象处理请求、动态组合
  • 应用:审批流程、过滤器
  • 示例javax.servlet.Filter

5. 状态模式(State)

  • 定义:允许对象在其内部状态改变时改变它的行为
  • 特点:状态决定行为、状态可切换
  • 应用:状态机、游戏状态
  • 示例java.util.Iterator

6. 观察者模式(Observer)

  • 定义:定义对象间的一种一对多的依赖关系
  • 特点:通知机制、松耦合
  • 应用:事件处理、消息推送
  • 示例java.util.Observer

7. 中介者模式(Mediator)

  • 定义:用一个中介对象来封装一系列的对象交互
  • 特点:集中控制、减少直接依赖
  • 应用:GUI组件交互、聊天室
  • 示例java.util.Timer

8. 迭代器模式(Iterator)

  • 定义:提供一种方法顺序访问一个聚合对象中的各个元素
  • 特点:统一遍历接口、隐藏内部结构
  • 应用:集合遍历、数据库查询
  • 示例java.util.Iterator

9. 访问者模式(Visitor)

  • 定义:表示一个作用于某对象结构中的各元素的操作
  • 特点:操作与结构分离、易于添加新操作
  • 应用:编译器、文档处理
  • 示例java.nio.file.FileVisitor

10. 备忘录模式(Memento)

  • 定义:在不破坏封装性的前提下捕获一个对象的内部状态
  • 特点:保存和恢复状态、封装性
  • 应用:撤销操作、游戏存档
  • 示例java.io.Serializable

11. 解释器模式(Interpreter)

  • 定义:给定一个语言,定义它的文法的一种表示
  • 特点:解释执行、易于扩展语法
  • 应用:DSL、正则表达式
  • 示例java.util.Pattern

考试重点

三种类型的区别

  1. 创建型:关注对象创建(如何创建)
  2. 结构型:关注组合结构(如何组合)
  3. 行为型:关注交互职责(如何交互)

记忆口诀

  • 创建型:单原工抽构(单例、原型、工厂方法、抽象工厂、构建器)
  • 结构型:代适装桥外享组(代理、适配器、装饰、桥接、外观、享元、组合)
  • 行为型:模策命责状观中迭访备解(模板方法、策略、命令、责任链、状态、观察者、中介者、迭代器、访问者、备忘录、解释器)

易混淆点

  1. 工厂方法 vs 抽象工厂:工厂方法创建一种产品,抽象工厂创建产品族
  2. 代理 vs 适配器:代理控制访问,适配器接口转换
  3. 装饰 vs 代理:装饰增强功能,代理控制访问
  4. 策略 vs 状态:策略算法互换,状态行为随状态改变

答题技巧

  1. 看创建过程:创建型模式
  2. 看组合结构:结构型模式
  3. 看交互行为:行为型模式
  4. 看具体问题:选择对应的设计模式

相关笔记


创建时间:2026年5月10日