# visitor **Repository Path**: wangblue/visitor ## Basic Information - **Project Name**: visitor - **Description**: 访问者模式 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-10-02 - **Last Updated**: 2024-10-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 行为类型——访问者模式 ### 一、访问者模式简介 **访问者模式(Visitor Pattern)**是一种行为型设计模式,它允许你在不改变对象结构的情况下,向对象结构中的元素添加新的操作。该模式将操作的定义与元素的结构分离,使得你可以在不修改现有元素类的情况下添加新功能。 ### 二、核心概念: 1. **分离操作与结构**: - 访问者模式将操作(访问者)与数据结构(元素)分开,访问者负责定义操作,而元素则负责实现其结构。 2. **元素接口**: - 定义了一个 `accept` 方法,接受一个访问者对象,通常是一个接口或抽象类。 3. **访问者接口**: - 定义了针对具体元素的访问方法,每种元素类型对应一个访问方法。 4. **具体访问者**: - 实现访问者接口,定义对不同元素的具体操作。 5. **具体元素**: - 实现元素接口,并在 `accept` 方法中调用访问者的相应操作。 ### 三、结构: - **Visitor**:访问者接口,声明访问各类元素的方法。 - **ConcreteVisitor**:具体访问者,实现访问者接口,定义对各类元素的具体操作。 - **Element**:元素接口,声明 `accept` 方法。 - **ConcreteElement**:具体元素,实现元素接口,定义如何接受访问者。 - **ObjectStructure**:包含元素的集合,提供遍历和接受访问者的方法。 ### 四、使用场景 1. **对象结构稳定,但操作频繁变化**: - 如果对象结构(类层次)相对稳定,而需要经常添加新的操作,可以使用访问者模式。通过将操作封装在访问者类中,便于扩展。 2. **跨多个类执行相关操作**: - 当一个操作需要跨多个不相关的类执行时,访问者模式可以统一管理这些操作。 3. **对象结构包含不同类型的元素**: - 如果对象结构包含不同类型的元素,而不同类型元素需要不同的处理方式,访问者模式可以为每个元素类型定义相应的访问方法。 ### 五、案例场景 在这个场景中,假设你正在开发一个购物系统,其中有不同类型的商品,比如书籍和电子产品。每种商品都有特定的属性(如标题、价格或型号),并且你需要执行多种操作,例如计算总价格或打印商品信息。 通过使用访问者模式,系统可以灵活地处理这些操作。你可以创建多个访问者,比如 `PriceVisitor` 来计算总价格,或者 `InfoVisitor` 来输出每个商品的详细信息。每个访问者只需实现与其相关的逻辑,而元素类(商品)则保持简单,只负责接收访问者并调用相应的方法。 #### 5.1、UML图形 ![](images/访问者模式.jpg) #### 5.2、代码实现 [visitor: 访问者模式 - Gitee.com](https://gitee.com/wangblue/visitor/tree/master)