#include using namespace std;class element;
class elementa;
class elementb;
#define use_loki
#ifndef use_loki
// abstract visitor
class visitor;
// concrete visitors
class visitor1 : public visitor
virtual void visitelementb(elementb& pb)
};
class visitor2 : public visitor
virtual void visitelementb(elementb& pb)
};
// abstract element
class element;
// concrete elements a and b
class elementa : public element
};
class elementb : public element
};
#else
#include "visitor.h"
using namespace loki;
// abstract visitor
typedef cyclicvisitormyvisitor;
// concrete visitors
class visitor1 : public myvisitor
virtual void visit(elementa& pa)
virtual void visit(elementb& pb)
};
class visitor2 : public myvisitor
virtual void visit(elementa& pa)
virtual void visit(elementb& pb)
};
// abstract element
class element;
// concrete elements a and b
class elementa : public element;
class elementb : public element;
#endif
int main()
Visitor設計模式
物件導向系統的開發和設計過程,經常會遇到一種情況就是需求變更 requirement changing 經常做好的一個設計 實現了一個系統原型,客戶又會有了新的需求。因此不得不去修改已有的設計,最常見就是解決方案就是給已經設計 實現好的類新增新的方法去實現客戶新的需求,這樣就陷入了設計變更的夢魘 不...
Visitor模式小節
今天看scott meyers的 my most important c aha moments.ever 這篇文章 http www.artima.com cppsource top cpp aha moments.html 裡面有一點 understanding what problem vis...
visitor 訪問模式
採用 雙重委派 方式,使訪問者和被訪問物件進行隔離。有點難理解。它有一定的應用侷限性,訪問者和被訪問者應該可被列舉,結構相對固定。比如說 運算子處理與資料結構的關係。運算子 可列舉,型別如string,int object也是可以列舉的 我們以處理運算表示式為例,來寫個例子,只涉及 型別只涉及int...
Behavioral模式之Visitor模式
表示一個作用於某物件結構中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。無考慮一個編譯器,他將源程式表示為一個抽象語法樹。該編譯器需要在抽象語法上實施某些操作以進行 靜態語義 分析,例如檢查是否所有的變數都已經被定義了。他也需要生成 因為它可能要定義許多操作以進行 ...
設計模式之Visitor模式(筆記)
訪問者模式 表示一個作用於某個物件結構中的各元素操作。它使你能夠不改變各元素的類的前提下定義作用於這些元素的新操作。首先定義一個visitor抽象類,為每一個詳細類宣告一個visit操作 public abstract class visitor 接著定義繼承visitor的詳細類 public c...