访问者模式

canca17年前 (2007-03-26)设计模式304
//访问者模式
//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); 
      }
    }
 }


相关文章

单例模式

//CopyRight CAnca Software Office. 2006//Created by CAnca. import java.util.*; public class singleto...

建造者模式

//建造者模式//CopyRight(C)CAnca Software Office.//Created by CAnca. import java.util.*; public class Buil...

原型模式

//原型模式//CopyRight(C) CAnca Software Office.2006//Created by CAnca. public class PrototypeMode{ ...

代理模式

//代理模式--真实例子//CopyRight(C)CAnca Software Office.2006//Created by CAnca.   public class ProxyMod...

适配器模式

//适配器模式//CopyRight(C)CAnca Software Office.//Created by CAnca. public class AdapterMode{ public...

外观模式

//外观模式//CopyRight(C)CAnca Software Office. 2006//Created by CAnca. public class FacadeMode{ pub...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。