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

推荐订阅源

Microsoft Azure Blog
Microsoft Azure Blog
博客园_首页
Forbes - Security
Forbes - Security
WordPress大学
WordPress大学
P
Proofpoint News Feed
T
Threat Research - Cisco Blogs
L
LINUX DO - 热门话题
L
Lohrmann on Cybersecurity
Spread Privacy
Spread Privacy
D
Darknet – Hacking Tools, Hacker News & Cyber Security
大猫的无限游戏
大猫的无限游戏
博客园 - 三生石上(FineUI控件)
P
Privacy International News Feed
A
About on SuperTechFans
T
Tailwind CSS Blog
I
InfoQ
S
Securelist
云风的 BLOG
云风的 BLOG
罗磊的独立博客
Recent Announcements
Recent Announcements
T
The Exploit Database - CXSecurity.com
B
Blog RSS Feed
V
Visual Studio Blog
Know Your Adversary
Know Your Adversary
The GitHub Blog
The GitHub Blog
Jina AI
Jina AI
腾讯CDC
Cyberwarzone
Cyberwarzone
有赞技术团队
有赞技术团队
AWS News Blog
AWS News Blog
博客园 - 【当耐特】
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
F
Full Disclosure
S
Secure Thoughts
博客园 - 司徒正美
J
Java Code Geeks
Y
Y Combinator Blog
Google Online Security Blog
Google Online Security Blog
GbyAI
GbyAI
N
News and Events Feed by Topic
Help Net Security
Help Net Security
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Project Zero
Project Zero
T
Tenable Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
T
Tor Project blog
MyScale Blog
MyScale Blog
Scott Helme
Scott Helme
小众软件
小众软件
K
Kaspersky official blog

Nicksxs's Blog

学一下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的路由表和网关等信息 如何开启mysql的optimizer trace 浅析下mysql的索引的基数与可选择性 分享个加速github访问的方法 学习体验下Koupleless框架-浅析代码 学习体验下Koupleless框架 体验下nocodb这个神奇的系统 学习下MDC的机制 重新复习理解下java的类加载器 记录下ffmpeg命令 尝试学习理解下Claude Code的实现原理和细节 在Antigravity中对比体验Claude Sonnet 4.5模型 来看下我装备了5060TI显卡的gpt-oss模型表现 来看下google最新力作Antigravity的水平如何
一些设计模式的记忆点
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%