Changes

Jump to: navigation, search

Visitor

2,058 bytes added, 23:02, 8 April 2007
Code Examples
</pre>
Visitor pattern in Java:
 
<pre>
 
interface Visitor {
void visit(Wheel wheel);
void visit(Engine engine);
void visit(Body body);
void visit(Car car);
}
 
interface Visitable {
public void accept(Visitor visitor);
}
 
class Wheel implements Visitable {
private String name;
Wheel(String name) {
this.name = name;
}
String getName() {
return this.name;
}
public void accept(Visitor visitor) {
visitor.visit(this);
}
}
 
class Engine implements Visitable{
public void accept(Visitor visitor) {
visitor.visit(this);
}
}
 
class Body implements Visitable{
public void accept(Visitor visitor) {
visitor.visit(this);
}
}
 
class Car implements Visitable {
private Engine engine = new Engine();
private Body body = new Body();
private Wheel[] wheels
= { new Wheel("front left"), new Wheel("front right"),
new Wheel("back left") , new Wheel("back right") };
public Engine getEngine() {
return this.engine;
}
public Body getBody() {
return this.body;
}
public Wheel[] getWheels() {
return this.wheels;
}
public void accept(Visitor visitor) {
visitor.visit(this);
engine.accept(visitor);
body.accept(visitor);
for(int i = 0; i < wheels.length; ++i) {
wheels[i].accept(visitor);
}
}
}
 
class PrintVisitor implements Visitor {
 
public void visit(Wheel wheel) {
System.out.println("Visiting "+ wheel.getName()
+ " wheel");
}
public void visit(Engine engine) {
System.out.println("Visiting engine");
}
public void visit(Body body) {
System.out.println("Visiting body");
}
public void visit(Car car) {
System.out.println("Visiting car");
}
 
}
 
public class VisitorDemo {
static public void main(String[] args){
Car car = new Car();
Visitor visitor = new PrintVisitor();
car.accept(visitor);
}
}
 
 
</pre>
== Reference ==
1
edit

Navigation menu