use*_*398 2 java design-patterns visitor
以下是我用更好的代码示例提出的问题的后续问题:
以下代码使用访问者模式:
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());
}
}
Run Code Online (Sandbox Code Playgroud)
输出是:
?
?
?
?
Run Code Online (Sandbox Code Playgroud)
如何在不添加Animal.accept()中的instanceof开关的情况下修复它?(每次添加新动物类时我都不想维护switch())