大白话讲解 23 种设计模式简介
设计模式(Design Pattern)代表了最佳实践 ,是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定 ,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。
创建型模式(5种)
关注对象怎么创建,把创建逻辑和使用逻辑分开。
| 编号 | 模式名 | 核心口诀 | 生活类比 |
|---|---|---|---|
| 01 | 单例 Singleton | 全局唯一,入口唯一 | 全公司唯一的打印机 |
| 02 | 工厂方法 Factory Method | 一个工厂产一种产品 | 不同奶茶店做奶茶(喜茶、蜜雪冰城) |
| 03 | 抽象工厂 Abstract Factory | 一个工厂产一整套 | 小米生态店/华为生态店 |
| 04 | 建造者 Builder | 分步组装,复杂构建 | 点外卖自定义套餐,一步步选 |
| 05 | 原型 Prototype | 基于模板,快速克隆 | Word 模板另存为 |
结构型模式(7种)
关注类和对象怎么组合,形成更大的结构。
| 编号 | 模式名 | 核心口诀 | 生活类比 |
|---|---|---|---|
| 06 | 适配器 Adapter | 接口转换,兼容新旧 | USB-C 转接头 |
| 07 | 桥接 Bridge | 抽象与实现分离,独立扩展 | 遥控器(抽象)控电视(实现) |
| 08 | 组合 Composite | 树形结构,统一接口 | 文件夹里放文件与文件夹 |
| 09 | 装饰器 Decorator | 动态加功能,不改原类 | 奶茶加珍珠、加椰果 |
| 10 | 外观 Facade | 统一入口,简化调用 | 一键回家模式 |
| 11 | 享元 Flyweight | 共享状态,节省内存 | 五子棋中所有(黑棋/白棋)共享一个棋子对象 |
| 12 | 代理 Proxy | 控制访问,间接访问 | 明星经纪人 |
行为型模式(11种)
关注对象和类怎么交互,如何分配职责。
| 编号 | 模式名 | 核心口诀 | 生活类比 |
|---|---|---|---|
| 13 | 责任链 Chain of Res. | 链式处理,逐级传递 | 请假单一级级审批 |
| 14 | 命令 Command | 请求封装,支持撤销 | 服务员记下单 |
| 15 | 迭代器 Iterator | 统一遍历,隐藏内部 | 播放列表下一首 |
| 16 | 中介者 Mediator | 集中通信,解耦双方 | 房产中介 |
| 17 | 备忘录 Memento | 快照存档,恢复状态 | 游戏读档 |
| 18 | 观察者 Observer | 发布订阅,自动通知 | B 站关注 UP 主 |
| 19 | 状态 State | 状态改变,行为改变 | 手机静音 / 正常模式 |
| 20 | 策略 Strategy | 算法族封装,可互换 | 导航 APP 选路线 |
| 21 | 模板方法 Template | 骨架固定,步骤可变 | 咖啡制作 SOP |
| 22 | 访问者 Visitor | 稳定结构,扩展操作 | 会计师查账 |
| 23 | 解释器 Interpreter | 定义语法,解析表达式 | 自定义计算器 |
六大设计原则总结
| 原则 | 核心思想 |
|---|---|
| 单一职责 SRP | 一个类只做一件事,功能别杂糅 |
| 开闭原则 OCP | 能扩展新功能,不改原有老代码 |
| 里氏替换 LSP | 子类能完全替代父类,不破坏逻辑 |
| 接口隔离 ISP | 接口小而专,调用方不应该被迫依赖无关接口 |
| 依赖倒置 DIP | 依赖抽象接口,不依赖具体实现类 |
| 迪米特法则 LoD | 少跟陌生人打交道,降低类之间耦合 |
常用模式速记
创建对象用工厂,复杂构建找建造
功能增强找装饰,接口不配用适配
访问控制找代理,算法替换是策略
消息通知用观察,状态切换记状态
层层审批责任链,八句口诀记心间