在你告訴我已經有類似的問題之前,我知道,我讀過it。 但是這個問題重在時,我有興趣爲什麼。使用Visitor設計模式的一個很好的理由是什麼?
我知道事情是如何運作的。經典的動物,狗,貓的例子總是像一個魅力。
事情是這樣的代碼
int main()
{
Cat c;
Sound theSound;
c.letsDo(&theSound);
}
顯得那麼不自然的我。爲什麼?
我的意思是,是啊,這樣我有我的狗和貓的模型未分化(我第一次用英語BTW這個詞),因爲真正的implentation是聲音類下隱藏而不是隻是一個如何權衡你的代碼?多態不足以完成這樣的事情嗎?
對我來說,不同的是,多態性你必須編輯每個類(但模型保持不變,對吧?),而你只需要編輯一個類與訪客設計模式。
準確地說,行爲可以由第三方實施。 – 2010-09-10 15:15:14
好的,但是如果你爲SQL定義解析器,你是否已經有了語法定義?意外用例在哪裏?其實,因爲我們正在談論解析,不應該是一個更合適的例子解析器生成器?在那裏你有一個任意的語法,所以你必須定義一個通用樹walker類。 – dierre 2010-09-10 16:41:21
這不是關於SQL的結構。它關於客戶如何使用庫的結果/輸出。解析器的例子很簡單,因爲它有點「經典」。順便說一句,如果你有一個沒有固定結構的完全通用的API(任意「類似DOM」的節點),你最好用通用訪問方法而不是訪問者模式。 – Dirk 2010-09-11 18:22:44