admin管理员组

文章数量:1516870

java 访客模式,设计模式

设计模式 - 访客模式( Visitor Pattern)

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

实现 (Implementation)

我们将创建一个定义接受操作的ComputerPart接口。 Keyboard , Mouse , Monitor和Computer是实现ComputerPart接口的具体类。 我们将定义另一个接口ComputerPartVisitor ,它将定义一个访问者类操作。 Computer使用具体访问者做相应的动作。

VisitorPatternDemo ,我们的演示类,将使用Computer和ComputerPartVisitor类来演示访问者模式的使用。

Step 1

定义表示元素的接口。

ComputerPart.java public interface ComputerPart {

public void accept(ComputerPartVisitor computerPartVisitor);

}

Step 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);

}

}

Step 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);

}

Step 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.");

}

}

Step 5

使用ComputerPartDisplayVisitor显示Computer部分。

VisitorPatternDemo.java public class VisitorPatternDemo {

public static void main(String[] args) {

ComputerPart computer = new Computer();

computer.accept(new ComputerPartDisplayVisitor());

}

}

Step 6

验证输出。Displaying Mouse.

Displaying Keyboard.

Displaying Monitor.

Displaying Computer.

设计模式 - 模板模式( Template Pattern)

本文标签: java 访客模式设计模式