How does double dispatch work in Visitor pattern?

前端 未结 4 568
北海茫月
北海茫月 2020-12-14 03:18

I was looking into other questions related to the visitor pattern but couldn\'t understand the implementation of double dispatch in visitor pattern.

Please refer to

4条回答
  •  伪装坚强ぢ
    2020-12-14 03:42

    An example code, that shows double dispatch:

    import java.util.Arrays;
    import java.util.List;
    
    class Client {
        public static void main(String[] args) {
            List nodes = Arrays.asList(new NodeA(), new NodeB());
            List visitors = Arrays.asList(new NodeVisitor1(), new NodeVisitor2());
    
            for (Node node : nodes) {
                for (NodeVisitor visitor : visitors) {
                    node.accept(visitor);
                }
            }
        }
    }
    
    interface Node {
        void accept(NodeVisitor visitor);
    }
    
    interface NodeVisitor {
        void visit(Node node);
    }
    
    class NodeA implements Node {
    
        @Override
        public void accept(NodeVisitor visitor) {
            visitor.visit(this);
        }
    
        @Override
        public String toString() {
            return "Node A";
        }
    }
    
    class NodeB implements Node {
    
        @Override
        public void accept(NodeVisitor visitor) {
            visitor.visit(this);
        }
    
        @Override
        public String toString() {
            return "Node B";
        }
    }
    
    class NodeVisitor1 implements NodeVisitor {
    
        @Override
        public void visit(Node node) {
            System.out.println("Node visitor 1, node " + node);
        }
    }
    
    class NodeVisitor2 implements NodeVisitor {
    
        @Override
        public void visit(Node node) {
            System.out.println("Node visitor 2, node " + node);
        }
    }
    

    The output is:

    Node visitor 1, node Node A
    Node visitor 2, node Node A
    Node visitor 1, node Node B
    Node visitor 2, node Node B
    

提交回复
热议问题