Java访问者模式 Java模板模式 Java MVC模式 Java访问者模式 在访问者模式中,使用访问者类来改变元素类的执行算法。 通过这种方式,元素的执行算法可以随访问者变化而变化。 此模式属于行为模式类别。 根据每个模式,元素对象必须接受访问者对象,以便访问者对象处理对元素对象的操作。 实例 在这个实现的示例中,将创建一个叫作ComputerPart的接口,并定义接受操作。Keyboard, Mouse, Monitor 和 Computer 是实现ComputerPart接口的具体类。还将定义另一个接口ComputerPartVisitor,它将定义一个访问类操作。 Computer 使用具体的访客做相应的动作。 VisitorPatternDem这是一个演示类,将使用Computer和ComputerPartVisitor类来演示访问者模式的使用。 访问者模式示例的结构如下图所示 第1步 定义一个接口来表示元素,其代码如下 ComputerPart.java public interface ComputerPart { public void accept(ComputerPartVisitor computerPartVisitor); } 第2步 创建扩展上述类的具体类,其代码如下 Keyboard.java public class Keyboard implements ComputerPart { @Override public void accept(ComputerPartVisitor computerPartVisitor) { computerPartVisitor.visit(this); } } Monitor.java public class Monitor implements ComputerPart { @Override public void accept(ComputerPartVisitor computerPartVisitor) { computerPartVisitor.visit(this); } } Mouse.java public class Mouse implements ComputerPart { @Override public void accept(ComputerPartVisitor computerPartVisitor) { computerPartVisitor.visit(this); } } 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); } } 第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); } 第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."); } } 第5步 使用ComputerPartDisplayVisitor显示计算机的部件。 VisitorPatternDemo.java public class VisitorPatternDemo { public static void main(String[] args) { ComputerPart computer = new Computer(); computer.accept(new ComputerPartDisplayVisitor()); } } 第6步 验证输出,执行上面的代码得到以下结果 Displaying Mouse. Displaying Keyboard. Displaying Monitor. Displaying Computer. Java模板模式 Java MVC模式