Here is a followup question to the one I already asked with better code example:
The following code use visitor pattern:
class Animal { void accept(Visitor v) { v.visit(this); } }
class Cat extends Animal {}
class Dog extends Animal {}
class Poodle extends Dog {}
interface Visitor {
public void visit(Animal a);
public void visit(Cat a);
public void visit(Dog a);
public void visit(Poodle a);
}
class TalkVisitor implements Visitor {
public void visit(Animal a) { System.out.println("?"); }
public void visit(Cat a) { System.out.println("Meow"); }
public void visit(Dog a) { System.out.println("bark"); }
public void visit(Poodle a) { System.out.println("Arf"); }
}
class WalkVisitor implements Visitor {
public void visit(Animal a) { System.out.println("?"); }
public void visit(Cat a) { System.out.println("Sneak"); }
public void visit(Dog a) { System.out.println("Walk"); }
public void visit(Poodle a) { System.out.println("Skip"); }
}
public class Demo{
public static void main(String []args){
Animal list[] = { new Cat(), new Dog(), new Poodle() };
for (Animal a : list)
a.accept(new TalkVisitor());
for (Animal a : list)
a.accept(new WalkVisitor());
}
}
The output is:
?
?
?
?
How can I fix it without adding switch of instanceof inside Animal.accept()? (I don't want to maintain switch() each time I add a new animal class)
Aucun commentaire:
Enregistrer un commentaire