2012-11-29 29 views
0

典型的訪問者基本上根據從接受(對象)開始的類型分派訪問者。關於此訪問者的想法

想象一下在收集界面上工作的訪客。

enum Visiting { 
    STOP 
    CONTINUE; 
} 

Visitor { 
    accept(Object); 
    Visiting visit(Object); 
    Visiting visit(Map); 
    Visiting visit(List); 
    Visiting visit(Set); 
    Visiting visit(Collection); 
    Visiting visit(ArrayList). 
} 

An> ArrayList <在典型的Visitor中只會調用visit(List)。調用visit(Object) - > visit(Collection) - > visit(List) - > visit(ArrayList)有什麼好處。如果任何訪問 返回Visiting.STOP鏈接的下一個不被調用?

有什麼可能的論據會使這個選擇不好?

  • ( - )性能,而不是簡單地調用基於整個鏈的類型的一次訪問發生。
  • (+)很容易集中基於某些超級類型的常用操作而不重複。
+0

你想達到什麼目的?訪問者模式的要點是子類實例根據自己的類型決定調用哪個'visit()'方法。因此,在這種情況下,如果ArrayList有一個'accept(Visitor)'方法(但它沒有),它會調用'visit(ArrayList)'。 accept()方法在訪問對象中,而不在訪問者中。 –

回答