1 public class Client { 2 private static ObjectStructure Objects; 3 private static Visitor visitor; 4 public static void main(String[] args) { 5 //建立一個結構對象 6 Objects = new ObjectStructure(); 7 //給結構增長一個節點 8 Objects.add(new NodeA()); 9 //給結構增長一個節點 10 Objects.add(new NodeB()); 11 //建立一個新訪問者 12 visitor = new VisitorA(); 13 //讓訪問者訪問結構 14 Objects.action(visitor); 15 } 16 } 17 //抽象訪問者 18 interface Visitor{ 19 //對應於nodeA的訪問操做 20 void visit(NodeA node); 21 //對應於nodeB的訪問操做 22 void visit(NodeB node); 23 24 } 25 //具體訪問者A 26 class VisitorA implements Visitor{ 27 28 @Override 29 public void visit(NodeA node) { 30 System.out.println(node.operationA()); 31 } 32 33 @Override 34 public void visit(NodeB node) { 35 System.out.println(node.operationB()); 36 } 37 38 } 39 //具體訪問者B 40 class VisitorB implements Visitor{ 41 42 @Override 43 public void visit(NodeA node) { 44 System.out.println(node.operationA()); 45 } 46 47 @Override 48 public void visit(NodeB node) { 49 System.out.println(node.operationB()); 50 } 51 52 } 53 //抽象結點 54 abstract class Node{ 55 //接受操做 56 public abstract void accept(Visitor visitor); 57 } 58 //具體節點A 59 class NodeA extends Node{ 60 61 @Override 62 public void accept(Visitor visitor) { 63 visitor.visit(this); 64 } 65 //nodeA的特有商業方法 66 public String operationA(){ 67 return "Node A is visited"; 68 } 69 } 70 //具體節點B 71 class NodeB extends Node{ 72 @Override 73 public void accept(Visitor visitor) { 74 visitor.visit(this); 75 } 76 //nodeA的特有商業方法 77 public String operationB(){ 78 return "Node B is visited"; 79 } 80 } 81 //結構對象角色,它持有一個彙集,並向外界提供add()方法做爲對彙集的管理 操做,經過調用這個方法,能夠動態地增長一個新的節點。 82 class ObjectStructure{ 83 private Vector nodes; 84 private Node node; 85 //構造方法 86 public ObjectStructure(){ 87 nodes = new Vector(); 88 } 89 //執行訪問操做 90 public void action(Visitor visitor){ 91 for(Iterator it = nodes.iterator();it.hasNext();){ 92 node = (Node)it.next(); 93 node.accept(visitor); 94 } 95 } 96 97 //增長一個新的元素 98 public void add(Node node){ 99 nodes.add(node); 100 } 101 } 102 //此示意性實現中並無出現一個複雜的具備多個樹枝節點的對象樹結構,可是,在實際系統中訪問者模式一般用來處理複雜的對象樹結構的,並且 103 //訪問者模式能夠用來處理跨越多個等級結構的樹結構問題。這正是訪問者模式的功能強大之處。