Java访问者模式

来源:互联网 发布:东方财富dk买卖点源码 编辑:程序博客网 时间:2024/05/18 02:28
Java访问者模式


在访问者模式中,使用访问者类来改变元素类的执行算法。 通过这种方式,元素的执行算法可以随访问者变化而变化。 此模式属于行为模式类别。 根据每个模式,元素对象必须接受访问者对象,以便访问者对象处理对元素对象的操作。


实现实例


在这个实现的示例中,将创建一个叫作ComputerPart的接口,并定义接受操作。Keyboard, Mouse, Monitor 和 Computer 是实现ComputerPart接口的具体类。还将定义另一个接口ComputerPartVisitor,它将定义一个访问类操作。 Computer 使用具体的访客做相应的动作。


VisitorPatternDem这是一个演示类,将使用Computer和ComputerPartVisitor类来演示访问者模式的使用。








第1步


定义一个接口来表示元素,其代码如下 -


ComputerPart.java




 
public interface ComputerPart {
   public void accept(ComputerPartVisitor computerPartVisitor);
}
Java
第2步


创建扩展上述类的具体类,其代码如下 -


Keyboard.java


public class Keyboard implements ComputerPart {


   @Override
   public void accept(ComputerPartVisitor computerPartVisitor) {
      computerPartVisitor.visit(this);
   }
}
Java
Monitor.java


public class Monitor implements ComputerPart {


   @Override
   public void accept(ComputerPartVisitor computerPartVisitor) {
      computerPartVisitor.visit(this);
   }
}
Java
Mouse.java


public class Mouse implements ComputerPart {


   @Override
   public void accept(ComputerPartVisitor computerPartVisitor) {
      computerPartVisitor.visit(this);
   }
}
Java
Computer.java




public class Computer implements ComputerPart {


   ComputerPart[] parts;


   public Computer(){
      parts = new ComputerPart[] {new Mouse(), new Keyboard(), new Monitor()};        
   } 




   @Override
   public void accept(ComputerPartVisitor computerPartVisitor) {
      for (int i = 0; i < parts.length; i++) {
         parts[i].accept(computerPartVisitor);
      }
      computerPartVisitor.visit(this);
   }
}
Java
第3步


定义一个接口来代表访问者,其代码如下 -
ComputerPartVisitor.java


public interface ComputerPartVisitor {
    public void visit(Computer computer);
    public void visit(Mouse mouse);
    public void visit(Keyboard keyboard);
    public void visit(Monitor monitor);
}
Java
第4步


创建实现上述类的具体访问者,其代码如下 -
ComputerPartDisplayVisitor.java




public class ComputerPartDisplayVisitor implements ComputerPartVisitor {


   @Override
   public void visit(Computer computer) {
      System.out.println("Displaying Computer.");
   }


   @Override
   public void visit(Mouse mouse) {
      System.out.println("Displaying Mouse.");
   }


   @Override
   public void visit(Keyboard keyboard) {
      System.out.println("Displaying Keyboard.");
   }


   @Override
   public void visit(Monitor monitor) {
      System.out.println("Displaying Monitor.");
   }
}
Java
第5步


使用ComputerPartDisplayVisitor显示计算机的部件。
VisitorPatternDemo.java


public class VisitorPatternDemo {
   public static void main(String[] args) {


      ComputerPart computer = new Computer();
      computer.accept(new ComputerPartDisplayVisitor());
   }
}
Java
第6步


验证输出,执行上面的代码得到以下结果 -


Displaying Mouse.
Displaying Keyboard.
Displaying Monitor.
Displaying Computer.