净谦

导航

访问者模式

package behaviroal.visitor;

/**
 * 访问者模式
 * 适用于数据结构相对未定的系统,把数据结构和作用于结构上的操作间的耦合解开
 * @author zhangchy
 *
 */

import java.util.ArrayList;
import java.util.List;

//利用多太
interface Visitor{
 public void visit(NodeA A);
 public void visit(NodeB B);
 public void visit(NodeC C);
}

class CreateVisitor implements Visitor{

 public void visit(NodeA A) {
  // TODO Auto-generated method stub
  A.operation();
 }

 public void visit(NodeB B) {
  // TODO Auto-generated method stub
  B.operation();
 }

 public void visit(NodeC C) {
  // TODO Auto-generated method stub
  C.operation();
 }
 
}

//节点
abstract class Node{
 public abstract void accept(Visitor v);
}

//节点 A
class NodeA extends Node{
 @Override
 public void accept(Visitor v) {
  // TODO Auto-generated method stub
  v.visit(this);
 }
 
 public void operation(){
  System.out.println("A operation");
 }
 
}
//节点B
class NodeB extends Node{
 @Override
 public void accept(Visitor v) {
  // TODO Auto-generated method stub
  v.visit(this);
 }
 
 public void operation(){
  System.out.println("B operation");
 }
 
}

//节点C
class NodeC  extends Node{
 @Override
 public void accept(Visitor v) {
  // TODO Auto-generated method stub
  v.visit(this);
 }
 
 public void operation(){
  System.out.println("C operation");
 }
 
}

class ObjectStructures{
 List<Node> nodeList  = new ArrayList();
 
 public void addNode(Node node){
  nodeList.add(node);
 }
 
 public void action(Visitor v){
  for(Node n:nodeList){
   n.accept(v);
  }
 }
}


public class VisitorPattern {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Node n1 = new NodeA();
  Node n2 = new NodeB();
  Node n3 = new NodeC();
  
  ObjectStructures obj = new ObjectStructures();
  obj.addNode(n1);
  obj.addNode(n2);
  obj.addNode(n3);
  
  Visitor v  =new CreateVisitor();
  obj.action(v);
 }

}

posted on 2012-03-19 11:25  康安V  阅读(147)  评论(0)    收藏  举报