Предположим, этот класс модели:
public class Car extends Vehicle implements Visitable {
.....
void accept(VehicleVisitor visitor){
visitor.visit(this);
}
.....
}
Использование посетителя, поскольку решение о выдаче определенных транспортных средств было принято очень поздно (после создания класса автомобилей).
И определенная иерархия Visitor с базовым классом с именем VehicleEvaluatorVisitor, унаследованным от CarVisitor, целью которого является информирование о том, заслуживает ли транспортное средство награды или нет:
public class VehicleEvaluatorVisitor implements VehicleVisitor {
boolean mustBeAwarded;
public visit(Car car){
....
mustBeAwarded= true; //after some conditional
}
.... //other visit methods
boolean mustVehicleBeAwarded(){
return mustBeAwarded;
}
}
Цель этого проекта - позволить клиенту перебирать любые коллекции Транспортного средства, чтобы узнать, какое транспортное средство должно быть присуждено:
...
VehicleEvaluatorVisitor visitor = new VehicleEvaluatorVisitor ();
for(Vehicle vehicle : vehicules){
vehicle.accept(visitor);
boolean mustToBeAwarded = visitor.mustVehicleBeAwarded();
.....
...
Мой вопрос: приемлемый ли это дизайн?
(Конечно, концепция «Автомобиль и награда» - просто теоретический пример)