23 种设计模式实战速查表
项目选型背诵版按创建 / 结构 / 行为三类场景 选型 作用直击避免重复造轮子一、创建型模式5 种解决「对象重复 new、重复初始化」统一对象创建不重复构建逻辑表格模式适用业务场景核心作用防重复造轮子单例 Singleton配置管理类、线程池、Redis 连接池、工具类全局只实例化 1 份避免频繁创建销毁、重复初始化资源简单工厂同家族少量实现类创建短信阿里云 / 腾讯云统一封装 new 逻辑各处不用重复实例化工厂方法 FactoryMethod业务持续扩展支付微信 / 支付宝 / 银联一个产品对应一个工厂新增实现不加原有代码不用重复创建代码抽象工厂 AbstractFactory成套产品支付 对账、消息 推送成套组件批量创建一组关联对象避免多处零散 new 成套组件建造者 Builder复杂对象组装多条件查询参数、复杂返回 VO拆分构建步骤链式构造避免大量重复 set 赋值代码选型口诀单例控唯一简单工厂少扩展工厂方法易扩展抽象工厂成套造建造者拼复杂对象。二、结构型模式7 种解决「类整合、兼容、增强、树形封装」统一结构复用表格模式适用业务场景核心作用防重复造轮子适配器 Adapter对接三方接口多种第三方登录、不同支付 SDK统一对外入参兼容多版本接口不用重复写适配转换代码装饰器 Decorator动态叠加功能日志 权限 限流层层包装接口原有代码不动叠加增强不用每次新增功能重写原有类代理 Proxy接口鉴权、缓存、事务、RPC 远程调用统一代理层实现通用增强业务代码无需重复写日志 / 校验组合 Composite菜单树、部门组织、商品多级分类统一处理单个节点和节点集合不用分别写单条 / 批量两套遍历逻辑外观 Facade复杂多步骤接口聚合下单扣库存 生成订单 发消息封装内部复杂多类调用对外只暴露一个入口上层不用重复拼接调用链路享元 Flyweight海量重复对象字典、商品分类、常量字典复用内存中相同对象避免重复创建大量一模一样实例桥接 Bridge两个维度同时扩展消息短信 / 邮箱 普通 / 加急拆分两大变化维度避免类爆炸减少重复子类选型口诀适配兼容第三方装饰动态加功能代理统一做增强组合搞定树形类外观简化复杂调用享元复用重复对象。三、行为型模式11 种解决「重复分支、重复流程、重复通知、重复遍历」逻辑复用表格模式适用业务场景核心作用防重复造轮子策略 Strategy大量 if-else 分支运费计算、优惠规则、支付渠道拆分每种算法为独立策略消除臃肿判断新增优惠不用改老代码模板方法 Template流程固定、局部逻辑不同导入 Excel、订单审核、文件解析父类固定公共流程子类只实现差异化步骤公共逻辑只写 1 次观察者 Observer下单联动扣库存、发短信、积积分、记录日志发布者与监听解耦新增下游业务不用修改下单主逻辑迭代器 Iterator自定义集合遍历、树形遍历统一遍历规范不用每种集合手写一套遍历代码命令 Command后台任务队列、撤销操作、定时指令请求封装成对象统一排队执行不用重复封装请求参数状态 State订单多状态流转待支付→已付款→已发货→已完成消除状态 if 分支每个状态独立类新增状态不改动原有代码责任链 Chain参数校验→黑名单→限流→权限校验多级拦截链式流转校验新增校验节点直接加链不用嵌套 if备忘录 Memento表单草稿保存、订单数据回滚保存对象快照不用重复存储多份历史数据中介者 Mediator多组件互相依赖表单多字段联动组件通过中介通信消除大量组件互相调用代码访问者 Visitor同一实体多维度统计商品销量统计 / 利润统计实体不动新增统计逻辑新增访问类不修改原有实体解释器 Interpreter规则表达式解析、简易引擎固定语法统一解析不用重复编写表达式解析逻辑选型口诀分支多用策略流程固定用模板联动通知观察者多级拦截责任链状态流转用状态。四、落地选用三步法项目实战选模式通用规则找重复重复 new→创建型重复转换 / 增强→结构型重复 if / 重复流程→行为型找变化以后频繁新增实现支付、优惠优先策略、工厂以后频繁加功能装饰、代理防过度设计简单小工具直接工具类不用设计模式中等通用逻辑工具类 模板业务易扩展、多实现场景上设计模式五、终极精简背诵总结创建型管实例创建杜绝重复 new结构型管类整合统一兼容增强行为型管业务逻辑消灭冗余分支与流程选用设计模式核心目的剥离重复代码、隔离变化代码、复用通用代码从架构层面杜绝重复造轮子