一、什么是设计模式
设计模式(Design Pattern) 是面向对象软件开发中,针对反复出现的问题,总结出来的一套成熟、可复用的设计方案。
它不是现成框架,也不是可以直接复制粘贴的代码片段,而是一套设计思想。
早在1994年,GoF(Gang of Four,四人帮)合著《设计模式:可复用面向对象软件的基础》,整理了23种经典面向对象设计模式,也就是我们常说的 GoF 23种设计模式。
简单类比:
设计模式就像建筑行业的标准施工图。建筑师遇到阳台、拱门、承重墙这类常见场景,不需要每次从零构思,直接参考成熟方案。程序员遇到对象创建、类组装、对象交互等通用问题,同样可以参考设计模式来设计代码结构。
使用设计模式的目标:
- 降低代码耦合度
- 提升代码复用性
- 增强程序可扩展性
- 方便后续维护与团队协作
⚠️ 重要提醒:设计模式不是银弹,不能解决所有问题。简单业务强行套用模式,反而会造成过度设计,增加代码复杂度。
二、面向对象六大设计原则
六大原则是设计模式的底层指导思想,所有设计模式都是为了尽可能满足这些原则,实际开发中需要权衡取舍。
- 开闭原则(Open Closed Principle,OCP)
对扩展开放,对修改关闭。
新增功能尽量不要修改原有稳定代码,通过扩展方式实现新逻辑,减少线上代码改动带来的风险。
- 里氏替换原则(Liskov Substitution Principle,LSP)
子类可以替换父类,且不破坏原有业务。
继承关系需要谨慎设计,子类不能重写父类核心逻辑,避免继承滥用。
- 依赖倒置原则(Dependence Inversion Principle,DIP)
高层模块、低层模块都依赖抽象,不依赖具体实现。
面向接口编程,而不是面向具体类编程,方便替换底层实现、单元测试。
- 接口隔离原则(Interface Segregation Principle,ISP)
客户端不应该依赖它不需要的接口。
拆分庞大臃肿的接口,使用多个细粒度小接口,避免类被迫实现无用方法。
- 迪米特法则(Law of Demeter,LoD)
最少知道原则。一个对象尽量少了解其他对象内部细节,只和直接朋友通信,减少依赖。
- 合成复用原则(Composite Reuse Principle,CRP)
优先使用组合/聚合实现复用,少用继承。
继承属于强耦合;组合更加灵活,运行时可以动态替换成员对象。
三、GoF 23种设计模式三大分类
按照模式的关注点,分为创建型、结构型、行为型三类。

✅ 创建型模式(5种)
关注点:对象的创建。把对象创建逻辑和业务使用代码分离,屏蔽对象实例化细节。
- 单例模式
- 工厂方法模式
- 抽象工厂模式
- 建造者模式
- 原型模式
✅ 结构型模式(7种)
关注点:类与对象的组合装配,通过组合不同对象构建更强大的功能。
- 适配器模式
- 桥接模式
- 组合模式
- 装饰器模式
- 外观模式
- 享元模式
- 代理模式
✅ 行为型模式(11种)
关注点:对象之间的交互与职责划分,处理算法、流程、消息传递等行为。
- 责任链模式
- 命令模式
- 解释器模式
- 迭代器模式
- 中介者模式
- 备忘录模式
- 观察者模式
- 状态模式
- 策略模式
- 模板方法模式
- 访问者模式
四、什么时候适合使用设计模式
✅ 适合场景
- 模块功能未来需要频繁扩展
- 组件需要多种实现,可以动态切换
- 代码耦合严重,维护成本高
- 团队多人协作,需要统一代码设计思路
- 阅读主流框架源码(Spring、MyBatis等)
❌ 不适合场景
- 一次性简单脚本,写完很少改动
- 需求极不稳定,频繁推翻重构
- 简单逻辑,引入模式会增加大量抽象类、接口
五、学习设计模式常见误区
- ❌ 死记硬背UML图和定义,不理解解决什么问题
- ❌ 写代码先想“我要用哪个模式”,为了套模式而写代码
- ❌ 认为设计模式可以完全消除所有if-else
- ✅ 正确思路:先发现代码痛点,再考虑是否引入对应模式
- ✅ 结合框架源码学习,观察框架中是如何落地设计模式
0 条笔记