**封裝作用於數據結構元素上的操作**。當操作需修改時,數據結構保持不變。
System.Collections 提供大量集合操作,但多針對**同類型物件**集合if/else 或 switch 類型判斷 → 違反開閉原則、難以維護visitor.Visit(this)node.Operation()
| 角色 | 職責 |
|---|---|
| 抽象訪問者 | 宣告一或多個訪問操作,形成所有具體元素必須實作的介面 |
| 具體訪問者 | 實作抽象訪問者介面,提供各元素的具體訪問邏輯 |
| 抽象節點 | 宣告 Accept(Visitor) 接受操作 |
| 具體節點 | 實作 Accept,反向調用訪問者對應方法 |
| 物件結構 | 遍歷所有元素;提供高層介面讓訪問者訪問每元素;可設計為聚合/列表/集合 |
| 客戶端 | 建立物件結構與訪問者,發起訪問 |
✅ 適用:物件結構穩定,但操作/演算法頻繁新增/變化 ✅ 適用:需對異構集合(不同類型元素)進行統一操作 ✅ 適用:操作邏輯複雜,不宜放入元素類別本身 ❌ 不適用:物件結構頻繁新增節點類別 ❌ 不適用:簡單同質集合操作