訪問者模式 首先有兩個東西:
一個是訪問者vistor (每一個訪問者類都代表了一類操作)
一個是被訪問者entity (model /info/pojo/node等等這些都行)也就是是說是一個實體類 其操作方法被抽離給了其他類。
訪問者模式的核心思想就是**“把操作從數據結構中分離出來,每種操作獨立成一個訪問者類”**,這樣可以靈活地擴展操作,而無需修改數據結構本身。
雖然是訪問者提供行為本身 但是 使用時 是被訪問者來調用這個方法 。ta
訪問者模式確實是由 被訪問者(元素) 調用訪問者的,這是訪問者模式的一個關鍵特性,也是它實現 “雙分派” 的機制。
被訪問者調用訪問者,被訪問者提供了一個“入口”。來決定哪個訪問者來訪問它。
**非常貼切!**
訪問者模式確實有點像“病人看病,選擇科室”,這個類比很形象地抓住了訪問者模式的核心。
---
### ?? 類比解釋
#### 1?? **病人(被訪問者)**
- **特點**:類型固定(如病人發燒、病人手術、正常體檢),職責是“被處理”。
- **行為**:知道自己需要去哪個科室(調用 `accept` 方法)。
- **例子**:
```java
病人 br = new 病人 ();
br .accept(visitor); // 病人知道自己需要去“哪個科室”
```
#### 2?? **科室(訪問者)**
- **特點**:每種操作是一個獨立的訪問者類(如發熱門診、臨床科、化驗科)。
- **行為**:根據病人的類型提供不同的服務(如開藥、手術、體檢)。
- **例子**:
```java
class 臨床Visitor implements 科室Visitor