4.4 设计模式与 SOLID 实战
设计模式是对反复出现的设计压力的命名解决方案。SOLID 原则是管理依赖和变化的启发式规则。二者在回应真实力量时有用,在作为装饰时有害。
正在加载交互实验...
正在加载概念检查...
模式家族
创建型模式管理对象创建。例子包括 Factory 和 Builder。
结构型模式管理部分之间的关系。例子包括 Adapter、Facade、Decorator。
行为型模式管理通信和职责。例子包括 Strategy、Observer、Command、Template Method。
模式名字没有压力本身重要:
- 调用方是否需要停止依赖具体类?
- 我们是否需要替换算法?
- 我们是否需要包一层外部 API?
- 我们是否需要通知多个订阅者?
- 我们是否需要组合行为,而不是制造巨大继承树?
SOLID 作为变化启发式
| 原则 | 实用理解 |
|---|---|
| SRP | 一个模块应该有一个主要变化理由 |
| OCP | 在不修改稳定核心逻辑的情况下添加常见变化 |
| LSP | 子类型不应让调用方意外 |
| ISP | 不要强迫客户端依赖不用的方法 |
| DIP | 高层策略不应被低层细节锁死 |
正在加载交互实验...
正在加载概念检查...
模式税
模式会增加名字、文件、间接层和测试表面积。只有当它买到你能解释的灵活性时,才值得支付这笔税。
坏理由:“这样看起来更企业级。”
好理由:“我们每个月都会新增定价规则;Strategy 让每条规则更容易测试,也降低部署风险。”
正在加载本节练习...