首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 設計模式:訪問者模式完整指南(一)— 核心意圖、問題背景與結構圖解

     編輯:關於C語言

訪問者模式核心意圖

**封裝作用於數據結構元素上的操作**。當操作需修改時,數據結構保持不變。

問題背景

  • System.Collections 提供大量集合操作,但多針對**同類型物件**集合
  • 若集合包含**不同類型元素**,且操作細節**隨元素類型不同而異**
  • 傳統做法:大量 if/else 或 switch 類型判斷 → 違反開閉原則、難以維護
  • 訪問者模式提供優雅替代方案

核心機制:雙重分派

  • 數據結構每個節點接受訪問者調用
  • 節點將自己傳給訪問者:visitor.Visit(this)
  • 訪問者反向執行節點操作:node.Operation()
  • **雙重分派意義**:操作由「訪問者類型」與「節點類型」**共同決定**

模式結構圖

六大角色職責

角色職責
抽象訪問者宣告一或多個訪問操作,形成所有具體元素必須實作的介面
具體訪問者實作抽象訪問者介面,提供各元素的具體訪問邏輯
抽象節點宣告 Accept(Visitor) 接受操作
具體節點實作 Accept,反向調用訪問者對應方法
物件結構遍歷所有元素;提供高層介面讓訪問者訪問每元素;可設計為聚合/列表/集合
客戶端建立物件結構與訪問者,發起訪問

適用場景判斷

✅ 適用:物件結構穩定,但操作/演算法頻繁新增/變化
✅ 適用:需對異構集合(不同類型元素)進行統一操作
✅ 適用:操作邏輯複雜,不宜放入元素類別本身
❌ 不適用:物件結構頻繁新增節點類別
❌ 不適用:簡單同質集合操作
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved