विकिपीडिया sample और गोफ बुक में, विज़िटर पैटर्न का उपयोग कुछ स्वीकार्य पर accept
विधि को कॉल करके शुरू किया जाता है। लेकिन यह इस तरह क्यों है? हम visit
विधि को वांछित स्वीकार्य के साथ तर्क के रूप में क्यों कॉल नहीं कर सकते? हम अभी भी विज़िटर व्यवहार को 2 प्रकार - आगंतुक और स्वीकार्य (डबल प्रेषण) पर निर्भर कर सकते हैं - और हम अनावश्यक कॉल को खत्म कर सकते हैं (जैसा कि मुझे लगता है)।हम Acceptor.accept() को कॉल करके विज़िटर क्यों शुरू करते हैं, और Visitor.visit() नहीं?
यहाँ इस वर्णन करने के लिए नमूना कोड:
public interface Visitor {
void visit(AcceptorA acceptor);
void visit(AcceptorB acceptor);
}
//
// Visitor which sings
//
class SingingVisitor implements Visitor {
public void visit(AcceptorA acceptor) {
System.out.println("sing A");
}
public void visit(AcceptorB acceptor) {
System.out.println("sing B");
}
}
//
// Visitor which talks
//
class TalkingVisitor implements Visitor {
public void visit(AcceptorA acceptor) {
System.out.println("talk A");
}
public void visit(AcceptorB acceptor) {
System.out.println("talk B");
}
}
//
// Acceptor subclasses
//
class AcceptorA implements BaseAcceptor {
}
class AcceptorB implements BaseAcceptor {
}
//
// Launcher class
//
class VisitorMain {
public static void main(String[] args) {
Visitor v = new TalkingVisitor();
AcceptorA a = new AcceptorA();
AcceptorB b = new AcceptorB();
v.visit(a);
v.visit(b);
v = new SingingVisitor();
v.visit(a);
v.visit(b);
}
}
यह सिर्फ एक उदाहरण है - किसी ने भी नहीं कहा कि इसे इस तरह कार्यान्वित किया जाना है। –
@ डेव न्यूटन मैंने इस सवाल से बिल्कुल यह पता लगाने के लिए कहा है कि क्या मैं गोफ दृष्टिकोण का कुछ लाभ देख रहा हूं या यह सिर्फ एक सम्मेलन है। –