访问者模式

canca canca
2007-03-26 15:03
1
0

//访问者模式
//CopyRight(C) CAnca software Office.2006
//Created by CAnca.

import java.util.*;

public class VisitorMode{
 public static void main(String[] args){
  // Setup structure 
       ObjectStructure o = new ObjectStructure();
       o.Attach(new ConcreteElementA());
       o.Attach(new ConcreteElementB());
 
      // Create visitor objects 
       ConcreteVisitorA v1 = new ConcreteVisitorA();
       ConcreteVisitorB v2 = new ConcreteVisitorB();
 
       // Structure accepting visitors 
       o.Accept(v1);
       o.Accept(v2);
 } 
}

//Visitor
abstract class Visitor{
 abstract void VisitorConcreteElementA(ConcreteElementA element);
 abstract void VisitorConcreteElementB(ConcreteElementB elelemt);
}
class ConcreteVisitorA extends Visitor{
 public void VisitorConcreteElementA(ConcreteElementA element){
  System.out.println(element.getClass().getName() + " visited by " + this.getClass().getName());
 }
 public void VisitorConcreteElementB(ConcreteElementB element){
  System.out.println(element.getClass().getName() + " visited by " + this.getClass().getName());
 }
}

class ConcreteVisitorB extends Visitor{
 public void VisitorConcreteElementA(ConcreteElementA element){
  System.out.println(element.getClass().getName() + " visited by " + this.getClass().getName());
 }
 public void VisitorConcreteElementB(ConcreteElementB element){
  System.out.println(element.getClass().getName() + " visited by " + this.getClass().getName());
 }
}

//Element
abstract class Element{
 abstract void Accept(Visitor visitor);
}

class ConcreteElementA extends Element{
 public void Accept(Visitor visitor){
  visitor.VisitorConcreteElementA(this);
 }
}

class ConcreteElementB extends Element{
 public void Accept(Visitor visitor){
  visitor.VisitorConcreteElementB(this);
 }
}

//ObjectStructure
class ObjectStructure{
    private ArrayList elements = new ArrayList();
 
    public void Attach(Element element)
    {
      elements.add(element);
    }
 
    public void Detach(Element element)
    {
      elements.remove(element);
    }
 
    public void Accept(Visitor visitor)
    {
      for(int i = 0 ; i < elements.size() ; i++)
      {
       Element e = (Element)elements.get(i);
        e.Accept(visitor);
      }
    }
 }

发表评论