设计模式与原则:构建可扩展代码的经典之道
软件设计是一门艺术,而设计模式和原则是这门艺术的语法。它们不是教条,而是经过时间检验的智慧结晶。
为什么设计模式重要?
想象一下,你在盖房子。每一块砖自己堆叠,最终只能是一堵墙。但如果你懂得使用不同的砌法——砖混结构、框架结构、钢结构——你就能建出摩天大楼。
设计模式就是这样一套"建筑语法"。它们是:
- 已解决的问题 — 前人已经踩过的坑,总结出的解决方案
- 通用的词汇 — 让你和团队高效沟通
- 经过验证的实践 — 无数项目验证过的最佳实践
核心设计原则:SOLID
| 原则 | 全称 | 解释 |
|---|---|---|
| S | 单一职责 | 一个类只做一件事 |
| O | 开闭原则 | 对扩展开放,对修改封闭 |
| L | 里氏替换 | 子类可以替换父类 |
| I | 接口隔离 | 不要依赖不需要的接口 |
| D | 依赖倒置 | 依赖抽象而非具体 |
23种经典设计模式
分为三类:
- 创建型(5种):Singleton、Factory、Abstract Factory、Builder、Prototype
- 结构型(7种):Adapter、Bridge、Composite、Decorator、Facade、Flyweight、Proxy
- 行为型(11种):Chain of Responsibility、Command、Iterator、Mediator、Memento、Observer、State、Strategy、Template Method、Visitor
最常用的5种模式
1. 单例模式(Singleton)
确保一个类只有一个实例。适用:配置管理、日志、连接池。
2. 工厂方法模式(Factory Method)
定义创建对象的接口,让子类决定实例化哪个类。适用:支付方式、通知渠道。
3. 观察者模式(Observer)
定义一对多依赖,当对象变化时通知所有依赖者。适用:事件系统、消息推送。
4. 装饰器模式(Decorator)
动态添加职责。适用:中间件、拦截器、日志。
5. 策略模式(Strategy)
定义一系列算法,封装起来使它们可以互换。适用:压缩算法、排序算法。
如何选择正确的模式?
问自己三个问题
- 你在解决什么问题? 创建/结构/行为
- 问题会变化吗? 会变化用策略、装饰器
- 代码会膨胀吗? 会膨胀→分解职责
反模式警告
不要为了用模式而用模式。如果一行代码能解决,不要用五个类。
实践建议
- 从问题出发 — 遇到问题→思考是否已有模式→没有再创新
- 小步重构 — 先写能工作的代码→识别重复→提炼模式
- 团队共识 — 在团队内建立模式语言
Design is not just what it looks like and feels like. Design is how it works. — Steve Jobs
Happy Coding! 🚀