当前位置: 首页 > 网络知识

C++ 设计模式之访问者模式

时间:2026-01-31 09:19:10

设计模式之访问者模式
  访问者模式,表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。访问者模式适用于数据结构相对稳定的系统。它把数据结构和作用于结构上的操作之间耦合解脱开,使得操作几何可以相对自由地演化。访问者模式的目的使要把处理从数据结构中分离出来。很多系统可以按照算法和数据结构分开,如果这样的系统有比较稳定的数据结构,又有易于变化的算法的话,使用访问者模式就是比较合适的。

其UML图如下:

每个ConcreteVisitor都有自己的数据处理方式,但是它们处理的数据则是不变的。在ObjectStucture中有Element的列表,并提供了访问数据的接口。

示例代码如下:

1 // VisitorModel.h文件 2 #pragma once 3 #include <iostream> 4 #include <string> 5 #include <vector> 6 #include <algorithm> 7 8 class Visitor; 9 // 被访问元素 10 class Element 11 19 std::string getName() 20 23 virtual void Accept(Visitor * visitor) = 0; 24 }; 25 26 class ConcreteElementA : public Element 27 30 void Accept(Visitor * visitor); 31 }; 32 33 class ConcreteElementB : public Element 34 37 void Accept(Visitor * visitor); 38 }; 39 40 // 访问者 41 class Visitor 42 ; 47 48 class ConcreteVisitorA : public Visitor 49 55 void VisitConcreteElementB(ConcreteElementB * p) 56 59 }; 60 61 class ConcreteVisitorB : public Visitor 62 68 void VisitConcreteElementB(ConcreteElementB * p) 69 72 }; 73 74 void ConcreteElementA::Accept(Visitor * visitor) 75 78 void ConcreteElementB::Accept(Visitor * visitor) 79 82 // 聚集类 83 class ObjectStructure 84 94 m_veclear(); 95 } 96 void add(Element * p) 97 100 void accept(Visitor * visitor) 101 106 } 107 };

测试代码如下:

1 #include <iostream> 2 #include "VisitorModel.h" 3 4 int main() 5

测试结果如下图:

访问者模式的优点就是增加新的操作很容易,因为增加新的操作就意味着增加一个新的访问者。访问者模式将有关的行为集中到一个访问者对象中。



上一篇:C++ nullptr/nullptr_t
下一篇:C/C++ 三元运算符
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器
  • 英特尔第五代 Xeon CPU 来了:详细信息和行业反应
  • 由于云计算放缓引发扩张担忧,甲骨文股价暴跌
  • Web开发状况报告详细介绍可组合架构的优点
  • 如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳
  • 美光在数据中心需求增长后给出了强有力的预测
  • 2027服务器市场价值将接近1960亿美元
  • 生成式人工智能的下一步是什么?
  • 分享在外部存储上安装Ubuntu的5种方法技巧
  • 全球数据中心发展的关键考虑因素
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器

    英特尔第五代 Xeon CPU 来了:详细信息和行业反应

    由于云计算放缓引发扩张担忧,甲骨文股价暴跌

    Web开发状况报告详细介绍可组合架构的优点

    如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳

    美光在数据中心需求增长后给出了强有力的预测

    2027服务器市场价值将接近1960亿美元

    生成式人工智能的下一步是什么?

    分享在外部存储上安装Ubuntu的5种方法技巧

    全球数据中心发展的关键考虑因素