访问者模式 首先有两个东西:
一个是访问者vistor (每一个访问者类都代表了一类操作)
一个是被访问者entity (model /info/pojo/node等等这些都行)也就是是说是一个实体类 其操作方法被抽离给了其他类。
访问者模式的核心思想就是**“把操作从数据结构中分离出来,每种操作独立成一个访问者类”**,这样可以灵活地扩展操作,而无需修改数据结构本身。
虽然是访问者提供行为本身 但是 使用时 是被访问者来调用这个方法 。ta
访问者模式确实是由 被访问者(元素) 调用访问者的,这是访问者模式的一个关键特性,也是它实现 “双分派” 的机制。
被访问者调用访问者,被访问者提供了一个“入口”。来决定哪个访问者来访问它。
**非常贴切!**
访问者模式确实有点像“病人看病,选择科室”,这个类比很形象地抓住了访问者模式的核心。
---
### 🎯 类比解释
#### 1️⃣ **病人(被访问者)**
- **特点**:类型固定(如病人发烧、病人手术、正常体检),职责是“被处理”。
- **行为**:知道自己需要去哪个科室(调用 `accept` 方法)。
- **例子**:
```java
病人 br = new 病人 ();
br .accept(visitor); // 病人知道自己需要去“哪个科室”
```
#### 2️⃣ **科室(访问者)**
- **特点**:每种操作是一个独立的访问者类(如发热门诊、临床科、化验科)。
- **行为**:根据病人的类型提供不同的服务(如开药、手术、体检)。
- **例子**:
```java
class 临床Visitor implements 科室Visitor