组合模式 + 访问者模式:树形结构与复杂操作的最佳拍档

时间:2025-02-11 06:58:50

???? 引言:当数据结构遇到多变的操作需求

场景痛点:
假设你正在开发一个文件系统分析工具,需要支持以下功能:

  • 统计文件夹大小
  • 搜索特定文件类型
  • 生成目录树结构图

如果直接在文件系统类中添加这些方法:

class File {
   
    // 原有方法
    void search() {
    /* 实现搜索 */ }
    void countSize() {
    /* 实现统计 */ }
    void drawTree() {
    /* 实现绘图 */ }
}

问题暴露:

  • 违反单一职责原则 ❌
  • 新增功能需修改已有类 ❌
  • 业务逻辑与数据结构强耦合 ❌

模式组合的价值:

  • 解耦数据与操作:访问者封装各种处理逻辑
  • 保持结构稳定:组合模式维护树形结构不变
  • 无限扩展能力:新增操作只需添加访问者

???? 一、模式概念回顾

1.1 组合模式(Composite Pattern)

定义:将对象组合成树形结构以表示"部分-整体"层次结构,使得用户对单个对象和组合对象的使用具有一致性。
核心价值:统一处理简单元素和复杂元素。

1.2 访问者模式(Visitor Pattern)

定义:在不改变数据结构的前提下定义作用于这些元素的新操作。
核心价值:分离数据结构与数据操作。

1.3 组合模式与访问者模式的关系

稳定结构
组合模式
多变操作
访问者模式
联合使用

???? 二、联合模式原理与结构

2.1 UML结构图