簡述:
訪問者模式:表示乙個作用於某物件結構中各個元素的操作,它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。
訪問者模式包括:抽象訪問者類、具體訪問者類、物件列舉結構類、抽象元素類、具體元素類。
抽象訪問者類:為該物件結構中的每個具體元素類物件宣告乙個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 訪問者模式是物件的行為模式。訪問者模式的目的是封裝一些施加於某種資料結構元素之上的操作。一旦這些操作需要修改的話,接受這個操作的資料結構則可以保持不變。一 問題 集合是大多數的系統都要處理的一種容器物件,它儲存了對其它物件的引用。一般情況下,在集合上採取的...