惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Last Week in AI
Last Week in AI
阮一峰的网络日志
阮一峰的网络日志
P
Proofpoint News Feed
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
MongoDB | Blog
MongoDB | Blog
云风的 BLOG
云风的 BLOG
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
J
Java Code Geeks
WordPress大学
WordPress大学
T
The Blog of Author Tim Ferriss
V
Visual Studio Blog
小众软件
小众软件
Microsoft Azure Blog
Microsoft Azure Blog
博客园_首页
IT之家
IT之家
Vercel News
Vercel News
C
Check Point Blog
Google DeepMind News
Google DeepMind News
月光博客
月光博客
D
DataBreaches.Net
酷 壳 – CoolShell
酷 壳 – CoolShell
美团技术团队
Y
Y Combinator Blog
Hugging Face - Blog
Hugging Face - Blog

Nicksxs's Blog

Pi Agent 源码解析(一):从调试环境到双层主循环 6GB显存能跑35B MoE吗:FreeToken极限配置、性能压榨与实操教程 聊聊 Java 的类加载机制一 从ASM到ByteKit再到Arthas:一条Java字节码增强链路 8GB显存如何跑35B:深入理解FreeToken的专家缓存与CPU-GPU协同 让chatgpt来给我讲解下deepseek harness的插件体系 来学习下pi agent的原理 如何在命令行中输出进度条 联想 G400 安装 Windows 7 折腾记录 记一个gitea推送失败的问题 学一下chrome的扩展开发 看下chrome的内置模型 从 app.test 到小锁:valet 本地 HTTPS 的完整链路 浅析一下jpeg图片格式及其来源 关于github拉取下载加速的另一个方式 关于适合什么模型,推荐下llmfit 看看目前本地能跑什么模型,使用llama.cpp 最近使用vibe coding的一些感悟 使用php的inotify扩展来监听文件变更 使用xiaomi mimo大模型api运行Hermes Agent 结合Obsidian的cli的一体化体验 开始尝试使用obsidian作为笔记软件 学习下大神的知识库 体验下微软开源的Markdown转换工具Markitdown 学习下git的worktree 一些架构师知识点的记录 解答一下关于traefik的一点疑惑 记录一下迁移服务器需要使用的一些命令 较早代iPhone更换新iPhone的一些小指南 如何查看mac的路由表和网关等信息
一些设计模式的记忆点
2026-05-10 · via Nicksxs's Blog

一、先看总原则

  1. 创建对象麻烦

用创建型模式

  1. 类或对象的组合关系复杂

用结构型模式

  1. 对象之间职责划分、通信流程复杂

用行为型模式


二、不同设计模式适合的场景


(一)创建型模式:解决“对象怎么创建”

  1. 单例模式(Singleton)

适合场景:

  • 系统中某个类只能有一个实例
  • 如配置管理器、线程池、缓存管理器、日志对象

关键词:

  • 唯一实例
  • 全局访问点

记忆点:

  • “一个类只有一个对象”基本就是单例

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

适合场景:

  • 需要创建对象,但不想直接 new
  • 不同条件下创建不同具体产品
  • 如不同数据库连接、不同导出器、不同支付方式对象

关键词:

  • 延迟实例化
  • 子类决定创建哪种对象

记忆点:

  • 关注“创建一个等级结构中的某一个产品”

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

适合场景:

  • 要创建一整组相关或相互依赖的对象
  • 如不同风格 UI 组件:Windows 风格按钮、文本框;Mac 风格按钮、文本框
  • 不同数据库族:连接、命令、结果集统一切换

关键词:

  • 产品族
  • 成套创建

记忆点:

  • 工厂方法是“一个产品”
  • 抽象工厂是“一族产品”

  1. 建造者模式(Builder)

适合场景:

  • 对象构造过程复杂,步骤多,但步骤顺序稳定
  • 如组装电脑、构建 SQL、创建复杂报表、创建复杂请求对象

关键词:

  • 分步构建
  • 构建过程与表示分离

记忆点:

  • “复杂对象一步步组装”就是建造者

  1. 原型模式(Prototype)

适合场景:

  • 创建对象成本高,复制比重新创建更高效
  • 如图形对象复制、配置模板复制、带大量初始化数据的对象

关键词:

  • 克隆
  • 复制现有对象

记忆点:

  • 区分浅拷贝、深拷贝是常见延伸点

(二)结构型模式:解决“类和对象怎么组织”

  1. 适配器模式(Adapter)

适合场景:

  • 已有类能用,但接口不兼容
  • 老系统对接新系统
  • 第三方接口封装

关键词:

  • 接口转换
  • 兼容旧接口

记忆点:

  • 核心是“让本来不能一起工作的类可以一起工作”

  1. 桥接模式(Bridge)

适合场景:

  • 存在两个独立变化维度,希望分别扩展
  • 如消息类型(普通/紧急)和发送方式(短信/邮件)都在变化
  • 图形形状和绘制平台都要扩展

关键词:

  • 抽象与实现分离
  • 多维度变化

记忆点:

  • 如果题目说“两个维度都要扩展,避免类爆炸”,多半是桥接

  1. 组合模式(Composite)

适合场景:

  • 树形结构
  • 如文件夹/文件、菜单/子菜单、组织架构

关键词:

  • 部分—整体
  • 树形结构统一处理

记忆点:

  • 叶子节点和容器节点统一对待

  1. 装饰器模式(Decorator)

适合场景:

  • 动态给对象增加功能,不想修改原类
  • 如 I/O 流加缓冲、加加密、加日志
  • 给组件附加权限校验、统计功能

关键词:

  • 动态增强
  • 比继承更灵活

记忆点:

  • 与代理模式容易混淆
  • 装饰器强调“增强功能”

  1. 外观模式(Facade)

适合场景:

  • 子系统复杂,希望对外提供统一简单入口
  • 如一键启动流程、统一服务入口、SDK 封装

关键词:

  • 简化调用
  • 统一入口

记忆点:

  • 核心是“隐藏子系统复杂性”

  1. 享元模式(Flyweight)

适合场景:

  • 系统中有大量细粒度对象,内存占用大
  • 如字符对象、棋子对象、图标对象

关键词:

  • 共享对象
  • 节省内存

记忆点:

  • 区分内部状态与外部状态

  1. 代理模式(Proxy)

适合场景:

  • 需要控制对对象的访问
  • 如远程代理、虚代理、权限代理、缓存代理

关键词:

  • 控制访问
  • 间接访问真实对象

记忆点:

  • 与装饰器区分:
    • 代理:控制访问
    • 装饰器:增强功能

(三)行为型模式:解决“对象之间怎么协作”

  1. 策略模式(Strategy)

适合场景:

  • 有多种算法或业务规则可互换
  • 如支付策略、折扣策略、排序策略、路由策略

关键词:

  • 算法封装
  • 可互换

记忆点:

  • “同一问题,多种算法可切换”就是策略

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

适合场景:

  • 流程固定,但某些步骤实现不同
  • 如报表生成流程、数据导入流程、考试流程

关键词:

  • 定义算法骨架
  • 子类重写具体步骤

记忆点:

  • “整体流程不变,细节步骤可变”就是模板方法

  1. 观察者模式(Observer)

适合场景:

  • 一个对象状态变化,要通知多个对象
  • 如事件监听、消息订阅、UI 联动、发布订阅

关键词:

  • 一对多通知
  • 发布—订阅

记忆点:

  • 题干出现“通知多个依赖对象”基本就是观察者

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

适合场景:

  • 多个对象都可能处理同一个请求,谁处理运行时决定
  • 如审批流程、过滤器链、异常处理链

关键词:

  • 请求沿链传递
  • 解耦发送者和接收者

记忆点:

  • 常见于工作流、过滤器、权限校验链

  1. 命令模式(Command)

适合场景:

  • 需要把请求封装成对象
  • 支持撤销/重做、请求队列、日志记录
  • 如菜单操作、遥控器、事务操作

关键词:

  • 请求对象化
  • 支持撤销、排队

记忆点:

  • “请求发送者与执行者解耦”是命令模式核心

  1. 状态模式(State)

适合场景:

  • 对象在不同状态下行为不同
  • 如订单状态、工作流状态、播放器状态、TCP 连接状态

关键词:

  • 状态变化引起行为变化
  • 消除大量 if-else

记忆点:

  • 与策略模式易混淆
  • 策略:主动切换算法
  • 状态:状态变化驱动行为变化

  1. 迭代器模式(Iterator)

适合场景:

  • 顺序访问聚合对象中的元素,而不暴露内部结构
  • 如遍历集合、列表、树结构

关键词:

  • 统一遍历接口
  • 隐藏内部结构

记忆点:

  • 主要用于集合遍历

  1. 中介者模式(Mediator)

适合场景:

  • 多个对象之间交互复杂,网状依赖严重
  • 如聊天系统、界面控件协作、航班调度

关键词:

  • 集中协调
  • 降低对象间耦合

记忆点:

  • “对象间不直接通信,都通过中间者协调”

  1. 备忘录模式(Memento)

适合场景:

  • 需要保存对象历史状态,以便恢复
  • 如撤销、回滚、存档点

关键词:

  • 状态快照
  • 恢复历史状态

记忆点:

  • 常和命令模式一起出现

  1. 访问者模式(Visitor)

适合场景:

  • 数据结构相对稳定,但对其进行的操作经常变化
  • 如编译器语法树处理、报表统计、对象结构分析

关键词:

  • 操作与数据结构分离
  • 易于新增操作

记忆点:

  • “结构稳定、操作多变”是判断关键

  1. 解释器模式(Interpreter)

适合场景:

  • 需要定义语法规则并解释执行
  • 如表达式计算、规则引擎、简单脚本解析

关键词:

  • 语法解释
  • 表达式求值

记忆点:

  • 适合简单语言或规则系统,不适合特别复杂语法

三、软考最常考的几个区分

  1. 工厂方法 vs 抽象工厂
  • 工厂方法:创建一种产品
  • 抽象工厂:创建一族产品

  1. 装饰器 vs 代理
  • 装饰器:增强功能
  • 代理:控制访问

  1. 策略 vs 状态
  • 策略:多种算法任选其一
  • 状态:对象状态改变导致行为变化

  1. 模板方法 vs 策略
  • 模板方法:流程骨架固定,细节延迟到子类
  • 策略:算法整体可替换

  1. 适配器 vs 桥接
  • 适配器:解决现有接口不兼容
  • 桥接:解决两个维度独立变化

0%