[Java] [Visitor Pattern] Given the files below, write all visitor classes so tha
ID: 3735294 • Letter: #
Question
[Java] [Visitor Pattern]
Given the files below, write all visitor classes so that the demo gives the following output.
Incomplete code: drive.google.com/drive/folders/16dmB8aMlggE54Jv4wK08jCyENRoWlHyJ?usp=sharing
Visiting front left wheel
Visiting front right wheel
Visiting back left wheel
Visiting back right wheel
Visiting body
Visiting engine
Visiting car
Kicking my front left wheel
Kicking my front right wheel
Kicking my back left wheel
Kicking my back right wheel
Waxing my body
Starting my engine
Starting my car
Explanation / Answer
Hello, I have completed your code. Created CarElementPrintVisitor and CarElementDoVisitor classes, implemented the overridden methods to print out proper messages to the console, and left all the other classes unchanged. Please find the code below.
// CarElementPrintVisitor.java
package visitor;
public class CarElementPrintVisitor implements CarElementVisitor {
@Override
public void visit(Wheel wheel) {
//displaying visiting wheel name
System.out.println("Visiting " + wheel.getName()+" wheel");
}
@Override
public void visit(Engine engine) {
System.out.println("Visiting engine");
}
@Override
public void visit(Body body) {
System.out.println("Visiting body");
}
@Override
public void visit(Car car) {
System.out.println("Visiting car");
}
}
// CarElementDoVisitor.java
package visitor;
public class CarElementDoVisitor implements CarElementVisitor {
@Override
public void visit(Wheel wheel) {
//displaying kicking wheel name
System.out.println("Kicking my "+wheel.getName()+" wheel");
}
@Override
public void visit(Engine engine) {
//displaying engine start message
System.out.println("Starting my engine");
}
@Override
public void visit(Body body) {
//displaying body waxing message
System.out.println("Waxing my body");
}
@Override
public void visit(Car car) {
//displaying car starting message
System.out.println("Starting my car");
}
}
// VisitorDemo.java (unchanged)
package visitor;
/**
*
* @author boonjv
*/
public class VisitorDemo {
static public void main(String[] args){
Car car = new Car();
car.accept(new CarElementPrintVisitor());
car.accept(new CarElementDoVisitor());
}
}
//Body.java (unchanged)
package visitor;
/**
*
* @author boonjv
*/
class Body implements CarElement {
public void accept(CarElementVisitor visitor) {
visitor.visit(this);
}
}
// Car.java (unchanged)
package visitor;
/**
*
* @author boonjv
*/
class Car implements CarElement{
CarElement[] elements;
public Car() {
this.elements = new CarElement[]
{ new Wheel("front left"), new Wheel("front right"),
new Wheel("back left") , new Wheel("back right"),
new Body(), new Engine() };
}
public void accept(CarElementVisitor visitor) {
CarElement[] temp = elements.clone();
for (int i = 0; i < temp.length; i++)
temp[i].accept(visitor);
visitor.visit(this);
}
}
// Engine.java (unchanged)
package visitor;
/**
*
* @author boonjv
*/
class Engine implements CarElement {
public void accept(CarElementVisitor visitor) {
visitor.visit(this);
}
}
// Wheel.java (unchanged)
package visitor;
/**
*
* @author boonjv
*/
class Wheel implements CarElement {
private String name;
public Wheel(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void accept(CarElementVisitor visitor) {
visitor.visit(this);
}
}
// CarElementVisitor.java (unchanged)
package visitor;
/**
*
* @author boonjv
*/
interface CarElementVisitor {
void visit(Wheel wheel);
void visit(Engine engine);
void visit(Body body);
void visit(Car car);
}
//CarElement.java (unchanged)
package visitor;
/**
*
* @author boonjv
*/
interface CarElement {
void accept(CarElementVisitor visitor);
}
/*OUTPUT*/
Visiting front left wheel
Visiting front right wheel
Visiting back left wheel
Visiting back right wheel
Visiting body
Visiting engine
Visiting car
Kicking my front left wheel
Kicking my front right wheel
Kicking my back left wheel
Kicking my back right wheel
Waxing my body
Starting my engine
Starting my car
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.