C 實現訪問者模式的基礎介紹

2022-09-24 12:57:12 字數 1717 閱讀 9192

目錄

對於系統中的某些物件中可能存在多種不同型別的元素,而且不同的呼叫者使用這些元素時也有所區別,這些呼叫者稱為訪問者。

訪問者模式(visitor pattern):表示乙個作用於某物件結構中各元素的操作,它使我們可以在不改變各元素的類的前提下定義作用於這些元素的新操作。

訪問者模式的應用場景:

訪問者模式中物件結構儲存了不同型別的元素物件,以提供不同訪問者訪問。訪問者模式包括兩個層次結構,乙個是訪問者層次結構,提供了抽象訪問者和具體訪問者,乙個是元素層次結構,提供了抽象元素和具體元素。

相同的訪問者可以以不同的方式訪問不同的元素,相同的元素可以接受不同訪問者以不同的方式訪問。

(1)visitor (抽象訪問者)

抽象訪問者為物件結構類中每乙個具體元素類宣告乙個訪問操作。

(2)concretevisitor (具體訪問者)

具體訪問者實現了每個由抽象訪問者宣告的操作,每乙個操作用於訪問物件結構中一種元素型別的元素。

(3)element(抽象元素)

抽象元素一般是抽象類或介面,定義乙個accept()方法,該方法以乙個抽象訪問者作為引數。

(4)concreteelement (具體元素)

具體訪問者實現了accept()方法,在其accept()

(5)objectstructure(物件結構)

物件結構是乙個元素的集合,它用於存放元素物件,並且提供了遍歷其內部元素的方法。

訪問者模式優點:

模式的缺點:

#include

#include

using namespace std;

class concreteelementa;

class concreteelementb;

/*抽象訪問者 宣告了訪問元素物件的方法,通常為每一種型別的元素物件都提供乙個訪問方法*/

class visitor ;

/*具體訪問者 用於定義對不同型別元素物件的操作*/

class concretevisitor1 : public visitor

void visitconcreteelementb(concreteelementb *pelementb) };

/*具體訪問者2*/

class concretevisitor2 : public visitor

void visitconcreteelementb(concreteelementb *pelementb)};

/*抽象元素類 宣告accept()方法,用於接受訪問者的訪問*/

class element ;

/*具體元素類 通過呼叫visitor類的visit()方法實現對元素的訪問*/

class concreteelementa : public element};

/*具體元素類 */

class concreteelementb : public element};

// objectstructure類(物件結構類),能列舉它的元素,可以提供乙個高層的介面以允許訪問者訪問它的元素

class objectstructure

void detach(element *pelement)

}void accept(visitor *pvisitor) }

int main()

參考文獻:

訪問者模式(c++實現):訪問者模式(c++實現)

c++設計模式之訪問者模式: 

訪問者模式(C 實現)

本部落格旨在個人總結回顧 訪問者模式 表示乙個作用於某物件結構中各元素的操作。它可以使你在不改變這些元素的類的前提下,定義作用於這些元素的新操作。說明 優點 符合單一職責原則。優秀的擴充套件性 靈活性。缺點 具體元素對訪問者公布細節,違反了迪公尺特原則。具體元素變更比較困難。違反了依賴倒置原則,依賴...

c 訪問者模式

寫個基類 ifndef employee hpp define employee hpp define cc synthesize vartype,varname,funname protected vartype varname public virtual vartype get funname...

C 訪問者模式

訪問者模式 訪問者模式 visitor 表示乙個作用於某個物件結構中各元素的操作,它使你可以再不改變各元素類的前提下定義作用於這些元素的新操作。結構圖 圖 using system using system.collections.generic using system.linq using sy...