代码耦合严重,需求一变更到处报错,bug 修不完。
没有清晰的架构与规范,代码可读性差,交接维护成本高。
相似逻辑散落各处,改一处漏一处,维护越来越痛苦。
一个类只做一件事,职责清晰、易维护。
对扩展开放、对修改关闭,新增功能不破坏现有代码。
子类可替换父类而不出错,保证继承的正确性。
接口尽量细化,客户端只依赖需要的部分。
依赖抽象而非实现,解耦模块,提升灵活性。
最少知道原则,降低对象间耦合。
模式不是背出来的,是"问题→方案"的映射。
| 遇到的问题 | 模式 | 典型例子 |
|---|---|---|
| 全局只需一个实例 | 单例 | 配置管理、连接池 |
| 创建对象逻辑复杂 | 工厂 | 不同支付渠道的创建 |
| 状态变化要通知多方 | 观察者 | 事件总线、消息订阅 |
| 算法要可替换 | 策略 | 多种计价规则 |
| 要给对象动态加能力 | 装饰器 | 日志、缓存、权限包装 |
| 流程固定、步骤可变 | 模板方法 | 审批流程、订单流程 |
| 对象间层层依赖 | 依赖注入/门面 | 框架 IoC、统一出口 |
全局唯一实例,如配置管理、连接池。
统一创建对象,解耦创建与使用,易于扩展。
状态变化通知订阅者,如事件系统、消息订阅。
算法可替换,避免大量条件分支,便于扩展。
动态增强功能,如日志、缓存、权限包装。
固定流程 + 可变步骤,子类实现差异部分。
Vue/Spring 等框架大量使用模式,读懂它们理解架构。
复杂业务解耦、状态管理、扩展点设计。
消息、缓存、日志等组件的模式化设计。
用模式重构烂代码,提升可维护性。