024 第28章 訪問者模式

2022-07-17 03:09:10 字數 3861 閱讀 6270

簡述:

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

訪問者模式包括:抽象訪問者類、具體訪問者類、物件列舉結構類、抽象元素類、具體元素類。

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

具體訪問者類:實現每個由抽象訪問者類宣告的操作,每個操作實現演算法的一部分,而該演算法片段乃是對應於結構中物件的類。

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

抽象元素類:定義乙個accept操作,它以乙個訪問者為引數。

具體元素類:實現accept操作。

訪問者模式:

1 #include 2 #include 3

using

namespace

std;45

class

cvisitor;6//

抽象元素類

7class

celement8;

1213

//抽象訪問者類

14class

cvisitor15;

2021

//具體元素類

22class cconcreteelementa : public

celement

2325

26void

operationa() {}

27};

2829

//具體元素類

30class cconcreteelementb : public

celement

3133

34void

operationb() {}

35};

3637

//具體訪問者類

38class cconcretevisitor1 : public

cvisitor

3945

virtual

void visitconcreteelementb(celement*pconcreteelementb)

4649

};50

51//

具體訪問者類

52class cconcretevisitor2 : public

cvisitor

5359

virtual

void visitconcreteelementb(celement*pconcreteelementb)

6063

};64

65//

物件列舉結構類

66class

cobjectstructure

6773

74void detach(celement*pelement)

7576

void accpet(cvisitor*pvisitor)

7781

};82

83int

main()

84

輸出結果:

例:男人女人成功失敗

**如下:

1 #include 2 #include 3

using

namespace

std;45

class

caction;6//

人類(抽象元素類)

7class

cperson8;

1314

//狀態抽象類(抽象訪問者類)

15class

caction16;

2122

//男人類(具體元素類)

23class cman : public

cperson

2427

};28

29//

女人類(具體元素類)

30class cwoman : public

cperson

3134

};35

36//

成功類(具體訪問者類)

37class csuccess : public

caction

3844

virtual

void getwomanconclusion(cperson*pwoman)

4548

};49

50//

失敗類(具體訪問者類)

51class cfailing : public

caction

5258

virtual

void getwomanconclusion(cperson*pwoman)

5962

};63

64//

戀愛類(具體訪問者類)

65class camativeness : public

caction

6672

virtual

void getwomanconclusion(cperson*pwoman)

7376

};77

78//

結婚類(具體訪問者類)

79class cmarriage : public

caction

8086

virtual

void getwomanconclusion(cperson*pwoman)

8790

};91

92//

物件結構類

93class

cobjectstructure

94101

102//

移除103

void detach(cperson*pperson)

104105

//檢視顯示

106void display(caction*paction)

107111

};112

113int

main()

114

輸出結果:

class caction;// 人類(抽象元素類)class cperson;

// 狀態抽象類(抽象訪問者類)class caction;

// 男人類(具體元素類)class cman : public cperson};

// 女人類(具體元素類)class cwoman : public cperson};

// 成功類(具體訪問者類)class csuccess : public cactionvirtual void getwomanconclusion(cperson* pwoman)};

// 失敗類(具體訪問者類)class cfailing : public cactionvirtual void getwomanconclusion(cperson* pwoman)};

// 戀愛類(具體訪問者類)class camativeness : public cactionvirtual void getwomanconclusion(cperson* pwoman)};

// 結婚類(具體訪問者類)class cmarriage : public cactionvirtual void getwomanconclusion(cperson* pwoman)};

// 物件結構類class cobjectstructure

// 移除void detach(cperson* pperson)

// 檢視顯示void display(caction* paction)};

int main()

第28章訪問者模式

一 概念 二 訪問者模式的優點和缺點 三 c 實現 visitor.h pragma once include include include using namespace std class action 類的前向宣告 人的抽象類 class person 狀態的抽象類 class action...

28 訪問者模式

表示乙個作用於某物件結構中的各元素的操作,它使你可以在不改變各元素的前提下定義作用於這些元素的新操作。適用於資料結構相對穩定,又有易於變化的演算法的系統 就是element穩定,visitor經常變化 由於把資料結構和資料結構上的操作進行了解耦,也就是把處理從資料結構中分離出來,使得增加新的操作很容...

訪問者模式

訪問者模式 visitor pattern 訪問者模式是物件的行為模式。訪問者模式的目的是封裝一些施加於某種資料結構元素之上的操作。一旦這些操作需要修改的話,接受這個操作的資料結構則可以保持不變。一 問題 集合是大多數的系統都要處理的一種容器物件,它儲存了對其它物件的引用。一般情況下,在集合上採取的...