自学教程 学编程从这里开始

设计模式

一、什么是设计模式

设计模式(Design Pattern)是面向对象软件开发领域沉淀下来的最佳实践,是开发人员在长期项目迭代中,针对软件开发里反复出现的通用问题,总结提炼出来的一套可复用解决方案。

它不是某段固定代码,也不是编程语言语法,而是一套设计思想与思路。这些方案经过大量项目试错验证,用来解决对象创建、类组合、对象交互等常见设计难题,帮助开发者写出高复用、低耦合、易维护扩展的代码。

设计模式起源于GoF(四人帮)1994年《设计模式:可复用面向对象软件的基础》一书,书中整理出23种经典面向对象设计模式,也就是我们常说的GoF23种设计模式。

通俗理解:设计模式就像软件开发的“解题手册”。遇到同类业务设计问题,不必从零反复造轮子,可以参考成熟的思路进行设计。

二、谁适合学习设计模式

  1. 新手开发者:快速学习面向对象设计思维,跳出只会写业务逻辑的阶段,建立代码架构意识。
  2. 有开发经验的工程师:复用行业成熟方案,优化现有项目代码质量,解决耦合过重、扩展困难等问题。
  3. 面试准备人员:设计模式是后端、架构岗位高频面试考点,同时也是读懂主流框架源码的基础(Spring、MyBatis等大量使用设计模式)。

💡前置基础:需要掌握面向对象基础:封装、继承、多态、抽象类、接口等概念。本系列后续示例主要以Java语言演示。

三、面向对象六大设计原则

六大原则是设计模式的底层思想,所有设计模式本质上都是对这些原则的落地实现,理解原则才能避免死记硬背模式。

  1. 开闭原则(OCP)
    对扩展开放,对修改关闭。系统迭代新增功能,尽量不修改原有已上线代码,通过扩展实现新能力,提升系统稳定性,一般依靠接口、抽象类实现。
  2. 里氏替换原则(LSP)
    凡是基类能够出现的地方,子类一定可以替换基类,而不破坏原有业务逻辑。是继承复用的基础,约束继承关系,防止滥用继承带来的bug。
  3. 依赖倒置原则(DIP)
    高层模块和低层模块都应该依赖抽象,而不是依赖具体实现。面向接口编程,降低模块之间耦合,便于单元测试与替换实现。
  4. 接口隔离原则(ISP)
    客户端不应该被迫依赖自己不需要的接口。把大而臃肿的接口拆分成多个细粒度的专用小接口,避免类实现一堆无用方法。
  5. 迪米特法则(最少知道原则)
    一个对象尽量少和其他对象发生交互,只和直接相关对象通信。减少对象之间互相依赖,降低系统复杂度。
  6. 合成复用原则
    优先使用组合/聚合实现复用,谨慎使用继承。继承是强耦合关系,组合方式更加灵活,降低类与类之间绑定关系。

注意:六大原则是指导思想,不是强制硬性规定。实际开发中要权衡取舍,不能为了满足原则而过度设计。

四、23种设计模式三大分类

GoF23种模式按照职责分为创建型、结构型、行为型三大类。

1. 创建型模式(5种)

核心关注点:对象如何创建,将对象创建和业务使用分离,屏蔽对象创建细节。

  • 单例模式
  • 工厂方法模式
  • 抽象工厂模式
  • 建造者模式
  • 原型模式

2. 结构型模式(7种)

核心关注点:类与对象如何组合、装配,通过组合得到更强大的功能。

  • 适配器模式
  • 桥接模式
  • 组合模式
  • 装饰器模式
  • 外观模式
  • 享元模式
  • 代理模式

3. 行为型模式(11种)

核心关注点:对象之间如何交互、职责如何分配,处理算法、流程、消息通知等行为逻辑。

  • 责任链模式
  • 命令模式
  • 解释器模式
  • 迭代器模式
  • 中介者模式
  • 备忘录模式
  • 观察者模式
  • 状态模式
  • 策略模式
  • 模板方法模式
  • 访问者模式

五、学习设计模式的误区

  1. ❌ 不要死记硬背定义和UML图,重点理解解决什么问题、适用场景、优缺点。
  2. ❌ 不要为了用模式而硬套模式。简单业务强行上模式,会增加代码复杂度,造成过度设计。
  3. ✅ 先识别业务痛点,再匹配对应的模式;同一个业务场景,可能有多种模式可以实现。
  4. ✅ 结合框架源码学习:很多框架大量使用设计模式,阅读源码可以加深理解。

六、本系列后续规划

本系列会逐个拆解23种设计模式,每一篇包含:

  1. 模式定义与核心意图
  2. 解决的问题、适用场景
  3. Java代码示例
  4. 优缺点分析
  5. 实际项目/框架中的应用案例

0 条笔记