I have following class diagram (visitor pattern implementation):
Expected result:
1) WiredVisitor should visit only Router and WiredNetworkCard
2)
you can just define some interfaces and slap one on each of the sets of elements that you want it to visit...the advantages of doing it this way are:
here is an implementation of what i'm talking about for your example:
visitors:
interface Wired {
R accept(Visitor v);
interface Visitor {
R visit(Router router);
R visit(WiredNetworkCard wiredNetworkCard);
}
}
interface Wireless {
R accept(Visitor v);
interface Visitor {
R visit(Router router);
R visit(WirelessNetworkCard wirelessNetworkCard);
}
}
elements:
class Router implements Wired, Wireless {
@Override
public R accept(Wired.Visitor v) {
return v.visit(this);
}
@Override
public R accept(Wireless.Visitor v) {
return v.visit(this);
}
}
class WiredNetworkCard implements Wired {
@Override
public R accept(Wired.Visitor v) {
return v.visit(this);
}
}
class WirelessNetworkCard implements Wireless {
@Override
public R accept(Wireless.Visitor v) {
return v.visit(this);
}
}