侧边栏壁纸
博主头像
SeaDream乄造梦

Dream,Don't stop a day of hard and don't give up a little hope。 ——不停止一日努力&&不放弃一点希望。

  • 累计撰写 127 篇文章
  • 累计创建 34 个标签
  • 累计收到 15 条评论

目 录CONTENT

文章目录

23 种设计模式的认知升级:深度整合现实世界类比(补充篇)

SeaDream乄造梦
2026-03-22 / 0 评论 / 0 点赞 / 4 阅读 / 3,216 字
温馨提示:
亲爱的,如果觉得博主很有趣就留下你的足迹,并收藏下链接在走叭

23 种设计模式的认知升级:从"怎么写代码"到"怎么思考问题"(深度完善版)

🍡 糯米说:设计模式不是 23 个死记硬背的套路,而是 23 种解决问题的思维方式。


一、为什么你学不会设计模式?

三种典型的学习困境

  1. 死记硬背型:硬背 23 种模式的名称、结构图,考试能满分,写代码时用不出来
  2. 生搬硬套型:为了用模式而用模式,代码过度设计
  3. 学完就忘型:没有实际场景支撑,两周后忘得一干二净

问题的根源:你把设计模式当作"知识点"来记忆,而不是"思维方式"来内化。

深度学习资源

📄 完整版指南23 种设计模式详解

📚 书籍推荐

  • 《设计模式:可复用面向对象软件的基础》(GoF 四人帮经典)
  • 《Head First 设计模式》(图文并茂,适合入门)

🌐 在线资源


二、创建型模式(5 种)- "如何优雅地造东西"

核心认知升级

新手思维new 就完事了
高手思维:对象的创建时机、方式、数量都需要精心设计

5 种模式的生活化类比

模式生活类比认知升级实战场景
单例模式国家的总统控制资源的唯一访问入口数据库连接池、配置文件、日志记录器
工厂方法餐厅点餐系统把"创建什么"的决策延迟到子类日志系统、支付系统、导出功能
抽象工厂装修公司套餐创建一系列相关对象,保证风格统一UI 主题系统、跨平台 UI、数据库驱动
建造者模式定制电脑配置单复杂对象的构建过程与表示分离SQL 构建器、HTTP 请求、报表生成
原型模式复印机复印文件通过复制现有对象来创建新对象游戏对象、表单模板、配置快照

现实世界深度类比

单例模式 → 国家总统

  • 为什么只能有一个:避免政出多门,保证决策一致性
  • 如果多个会怎样:两个总统发布矛盾命令,国家陷入混乱
  • 代码中的体现:多个数据库连接导致资源浪费、数据不一致

工厂方法 → 餐厅点餐

  • 你只说什么:"我要吃鱼香肉丝"
  • 厨房决定什么:用什么食材、哪个厨师炒、怎么调味
  • 代码中的体现:调用方只说"我要日志",工厂决定用 FileLogger 还是 DatabaseLogger

三、结构型模式(7 种)- "如何优雅地组织关系"

核心认知升级

新手思维:直接引用,能跑就行
高手思维:设计松耦合的结构,让系统易于扩展和维护

7 种模式的生活化类比

模式生活类比认知升级实战场景
适配器模式电源转换插头让不兼容的接口能够一起工作第三方 SDK 集成、新旧系统兼容
桥接模式遥控器与电器将抽象与实现分离,独立变化跨平台绘图、消息通知、数据库操作
组合模式公司组织架构用树形结构表示"部分 - 整体"文件系统、UI 组件树、菜单系统
装饰器模式手机壳 + 贴膜 + 挂饰动态地给对象添加职责Java IO 流、中间件系统、咖啡订单
外观模式酒店前台为复杂子系统提供统一接口框架封装、SDK 封装、微服务网关
享元模式共享单车通过共享技术支持大量细粒度对象文本编辑器、数据库连接池、线程池
代理模式明星经纪人控制对这个对象的访问远程代理、虚拟代理、保护代理

认知升级对比表

模式解决的问题新手做法高手做法
适配器接口不兼容修改原有代码写个适配器,原有代码不动
装饰器功能叠加用继承,类爆炸用组合,动态叠加
外观系统太复杂调用方了解所有子系统提供一个统一入口
代理无法控制访问直接访问对象通过代理添加额外逻辑

四、行为型模式(11 种)- "如何优雅地分配责任"

核心认知升级

新手思维:一个类搞定所有事
高手思维:让每个对象专注于自己的职责,通过协作完成复杂任务

11 种模式的生活化类比

模式生活类比认知升级实战场景
策略模式导航路线选择定义一系列算法并使它们可以互换排序算法、支付策略、压缩算法
模板方法做菜的食谱定义算法骨架,某些步骤延迟到子类数据导入、报表生成、单元测试
观察者模式微信公众号订阅一对多依赖,状态改变时通知所有依赖者事件总线、数据绑定、消息队列
迭代器模式翻书看书顺序访问聚合对象元素而不暴露内部表示集合遍历、数据库游标、文件遍历
责任链模式请假审批流程多个对象都有机会处理请求中间件链、异常处理、审批流程
命令模式餐厅点菜单将请求封装成对象,支持可撤销、队列化撤销/重做、任务队列、宏命令
状态模式水的三态变化内部状态改变时改变行为订单状态、游戏角色、TCP 连接
访问者模式海关检查在不改变元素的前提下定义新操作编译器 AST、报表系统、文件导出
中介者模式微信群聊用中介对象封装对象交互聊天室、航班调度、UI 表单联动
备忘录模式游戏存档读档捕获对象内部状态并保存撤销功能、事务回滚、配置管理
解释器模式编程语言编译器给定语言,定义文法并解释执行SQL 解析器、正则表达式、模板引擎

五、认知升级总结:设计模式的本质

三大类别的核心问题

类别核心问题新手思维高手思维
创建型"怎么造对象?"直接 new 就完事优雅地创建,控制时机、方式、数量
结构型"怎么组织关系?"直接引用,能跑就行灵活组合,松耦合易扩展
行为型"怎么分配责任?"一个类搞定所有事各司其职,协作完成复杂任务

设计模式的三个认知层级

第一层:记忆模式(Know What)

  • 记住 23 种模式的名称、结构图、适用场景
  • 局限:容易忘记,不会应用

第二层:理解模式(Know How)

  • 理解每种模式解决的问题和解决方案
  • 局限:知道但不会主动使用

第三层:内化模式(Know Why)⭐

  • 理解模式背后的设计原则和思维方式
  • 能力:遇到新问题时,能自发地设计出合适的模式
  • 最高境界:手中无模式,心中有模式

设计原则的终极认知

所有设计模式都遵循以下核心原则(SOLID + 其他):

  1. 单一职责原则(SRP):一个类只负责一项职责
  2. 开放封闭原则(OCP):对扩展开放,对修改封闭
  3. 里氏替换原则(LSP):子类可以替换父类
  4. 接口隔离原则(ISP):使用多个专用接口优于单个通用接口
  5. 依赖倒置原则(DIP):依赖抽象,不依赖具体实现
  6. 合成复用原则(CRP):优先使用组合,而非继承
  7. 迪米特法则(LoD):最少知道原则,降低耦合

六、实战建议:如何真正掌握设计模式

✅ 正确的学习方式

  1. 场景驱动:遇到实际问题时,再学习对应的模式
  2. 小步实践:每次只学一种模式,在项目中找机会应用
  3. 复盘总结:应用后复盘,记录使用场景和效果
  4. 刻意练习:阅读优秀开源项目的设计模式应用

❌ 错误的学习方式

  1. 死记硬背:硬背 23 种模式的结构图
  2. 过度设计:为了用模式而用模式,简单问题复杂化
  3. 纸上谈兵:只看不练,没有实战经验

🎯 糯米的学习路线建议

第 1 周:单例模式 + 工厂方法模式

  • 在现有项目中找场景应用
  • 记录使用前后的代码对比

第 2 周:策略模式 + 观察者模式

  • 重构 if-else代码
  • 实现一个简单的消息通知系统

第 3 周:装饰器模式 + 适配器模式

  • 给现有功能添加新特性
  • 集成一个第三方 SDK

第 4 周:复习 + 实战

  • 阅读开源项目源码
  • 总结自己的设计模式使用清单

七、写在最后

设计模式不是银弹,也不是金科玉律。

它们是前人总结的经验,是解决问题的工具箱,是思维方式的载体。

学习的终极目标

  • 不是记住 23 种模式
  • 而是内化背后的设计思想
  • 最终做到"手中无模式,心中有模式"

不要刻意追求"使用设计模式",而是追求"写出优雅的代码"

当你在实践中遇到重复代码、复杂耦合、难以扩展等问题时,设计模式会自然浮现。

真正的大佬,手中无模式,心中有模式。


互动话题

  1. 你在学习设计模式时遇到过哪些坑?
  2. 哪个设计模式让你印象最深刻?为什么?
  3. 你在实际项目中应用过哪些设计模式?效果如何?

欢迎在评论区分享你的经验和困惑,我们一起交流学习🍡


扩展资源

标签:#设计模式 #认知升级 #编程思维 #代码质量 #软件工程 #技术成长

0

评论区