Re: Visitor pattern vs if-ladder
Philipp wrote :
Hello,
I compared the speed of execution of an if-ladder with the visitor
pattern for counting different types of Vehicles.
If ladder:
public void count(Vehicle vehicle){
if (vehicle instanceof Car) {
counts[0]++;
} else if (vehicle instanceof Motorbike) {
counts[1]++;
} else if (vehicle instanceof Bike) {
counts[2]++;
[...]
I set up an enum wich contains an instance of a class which does the
work:
public interface BaseWorker
{
public void doWork();
}
public class MotorBikeWorker implements BaseWorker
{
...
@Override
public void doWork()
{
.. do something
}
}
public enum CarWorker
{
MOTOR_BIKE(new MotorBikeWorker()),
BIKE(new BikeWorker());
private BaseWorker worker;
CarWorker( BaseWorker worker )
{
this.worker = worker;
}
public BaseWorker getWorker()
{
return this.worker;
}
}
public abstract class Vehicle
{
private CarWorker workerEnum;
public Vehicle(CarWorker workerEnum)
{
this.workerEnum = workerEnum;
}
public final CarWorker getWorkerEnum()
{
return this.workerEnum;
}
}
public class MotorBike extends Vehicle
{
public MotorBike()
{
super(CarWorker.MOTOR_BIKE);
}
}
You then set up the class with the correct enum. To get work done you
simply call:
vehicleInstance.getWorkerEnum().getWorker().doWork();
// um, this is from memory as my work machine is not connected to
anything
--
Wojtek :-)