(12)GoF设计模式

!NOTE\] 前提引入 开发原则与设计模式是一种规范,是所有语言通用的 设计模式往开发原则上靠 将相似的流程业务抽取成设计模式

  • 设计模式:一种可以被重复利用的解决方案。
  • GoF(Gang of Four),中文名------四人组。
  • 《Design Patterns: Elements of Reusable Object-Oriented Software》(即《设计模式》一书),1995年由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 合著。这几位作者常被称为"四人组(Gang of Four)"。
  • 该书中描述了23种设计模式。我们平常所说的设计模式就是指这23种设计模式。
  • 不过除了GoF23种设计模式之外,还有其它的设计模式,比如:JavaEE的设计模式(DAO模式、MVC模式等)。
  • GoF23种设计模式可分为三大类:
    • 创建型 (5个):解决对象创建问题。
      • 单例模式
      • 工厂方法模式
      • 抽象工厂模式
      • 建造者模式
      • 原型模式
    • 结构型 (7个):一些类或对象组合 在一起的经典结构。
      • 代理模式
      • 装饰模式
      • 适配器模式
      • 组合模式
      • 享元模式
      • 外观模式
      • 桥接模式
    • 行为型 (11个):解决类或对象之间的交互问题。
      • 策略模式
      • 模板方法模式
      • 责任链模式
      • 观察者模式
      • 迭代子模式
      • 命令模式
      • 备忘录模式
      • 状态模式
      • 访问者模式
      • 中介者模式
      • 解释器模式

🏗️ 创建型(5种)------ "怎么造对象?"

  1. 单例模式

    → 全局只允许一个实例,比如配置管理器。

  2. 工厂方法模式

    → 定义一个创建对象的接口,让子类决定实例化哪个类(把 new 拆出去)。

  3. 抽象工厂模式

    → 一次性创建一整套相关或依赖的对象族(比如 Windows 风格 vs Mac 风格 UI 组件)。

  4. 建造者模式

    → 分步骤构建一个复杂对象,且允许不同表示(如造汽车:先底盘、再引擎、最后内饰)。

  5. 原型模式

    → 通过复制现有对象来创建新对象,避免重复初始化开销("克隆"代替"new")。


🧱 结构型(7种)------ "怎么组装结构?"

  1. 代理模式

    → 用一个替身(代理)控制对真实对象的访问(如远程代理、权限代理、懒加载)。

  2. 装饰模式

    → 动态地给对象"套壳"添加功能,比继承更灵活(如 Java I/O 流的层层包装)。

  3. 适配器模式

    → 让不兼容的接口能一起工作,像电源转换插头。

  4. 组合模式

    → 把树形结构(如文件夹/文件)当成统一对象处理,"部分-整体"透明化。

  5. 享元模式

    → 共享大量细粒度对象,节省内存(如文本编辑器中重复字符共用同一对象)。

  6. 外观模式

    → 提供一个统一入口,隐藏子系统的复杂性(如一键开机:背后启动 CPU、内存、硬盘...)。

  7. 桥接模式

    → 把抽象(Abstraction)和实现(Implementation)解耦,让它们能独立变化(如形状 × 颜色:圆形/方形 + 红/蓝,避免类爆炸)。


🤝 行为型(11种)------ "怎么协作交互?"

  1. 策略模式

    → 定义一系列算法,把它们封装起来,并可互相替换(如支付方式:微信/支付宝/银联)。

  2. 模板方法模式

    → 在父类定义算法骨架,子类实现具体步骤(如做菜流程固定,但炒菜细节不同)。

  3. 责任链模式

    → 请求沿一条链传递,直到有对象处理它(如审批流:组长→经理→总监)。

  4. 观察者模式

    → 一对多依赖,当一个对象状态改变,所有依赖者自动收到通知(如订阅号推送)。

  5. 迭代器模式

    → 提供一种方法顺序访问聚合对象的元素,而不暴露其内部结构(如 for-each 背后)。

  6. 命令模式

    → 将请求封装为对象,从而参数化、排队、记录日志或撤销操作(如 Undo/Redo)。

  7. 备忘录模式

    → 在不破坏封装的前提下,捕获并外部化对象的内部状态,以便恢复(如游戏存档)。

  8. 状态模式

    → 对象行为随内部状态改变而改变,看起来像换了类(如订单状态:待支付→已发货→已完成)。

  9. 访问者模式

    → 在不修改元素类的前提下,定义作用于这些元素的新操作(如对不同报表做"导出PDF"或"生成图表")。

  10. 中介者模式

    → 用一个中介对象封装多个对象的交互,避免网状耦合(如聊天室:用户不直接通信,全走服务器)。

  11. 解释器模式

    → 为简单语法规则定义语言,并解释执行(如正则表达式、SQL 解析器------但日常少用)。


💡 总结:

设计模式不是"银弹",而是解决特定场景下软件设计问题的经验结晶

初学时重在理解"什么场景用什么模式 ",而非死记硬背。

真正高手,早已"无招胜有招"------模式内化于心,代码自然优雅。

Spring 大量使用了这些模式(如 BeanFactory 是工厂,AOP 是代理,事件机制是观察者......)。理解模式,就等于拿到了读懂框架源码的钥匙 🔑!

相关推荐
化作繁星5 小时前
前端设计模式详解
前端·设计模式
ZouZou老师5 小时前
C++设计模式之责任链模式:以家具生产为例
c++·设计模式·责任链模式
赵得C6 小时前
软件设计师前沿考点精讲:新兴技术与性能优化实战
java·开发语言·分布式·算法·设计模式·性能优化
白衣鸽子6 小时前
【基础数据篇】数据等价裁判:Comparer模式
后端·设计模式
Charlo6 小时前
Open-AutoGLM Windows 安装部署教程
算法·设计模式·github
TDengine (老段)7 小时前
TDengine 存储引擎:极速、高压缩、零冗余
android·大数据·数据库·设计模式·时序数据库·tdengine·涛思数据
每次的天空7 小时前
Android车机开发——内存优化操作
android·学习·设计模式
赵得C8 小时前
软件设计师进阶知识点解析:分布式与数据应用考点精讲
java·开发语言·分布式·设计模式
o0向阳而生0o8 小时前
115、23种设计模式之解释器模式(22/23)
设计模式·解释器模式