在这种情况下,访问者模式将是非常好的考虑方法。比方说,您正在制作一款需要针对不同对象(猫、狗、金钱等)做出不同反应的游戏。所以这样做:
创建一个具有以下定义的接口IAnimal
:
interface IAnimal {
void visit(IAnimalVisitor visitor, Object param);
}
class Cat implements IAnimal {
void visit(IAnimalVisitor visitor, Object param) {
visitor.visit(this, param);
}
}
class Dog implements IAnimal {
void visit(IAnimalVisitor visitor, Object param) {
visitor.visit(this, param);
}
}
将为定义的每种动物类型IAnimalVisitor
包含一个visit()
方法。所以它会像:
interface IAnimalVisitor {
public void visit(Cat c, Object param);
public void visit(Dog c, Object param);
}
然后,您可以根据需要使用逻辑来处理猫和狗。例如:
class AnimalFeeder implements IAnimalVisitor {
public void visit(Cat c, Object param) {
c.feed(milk);
c.feed(cat_food);
}
public void visit(Dog d, Object param) {
d.feed(dog_food);
}
}
然后你可以使用上面的食物喂养类来喂养你的IAnimal
数组,如下所示:
IAnimal[] animals = new IAnimal[] { new Cat(), new Dog(),
new Dog(), new Cat() };
IAnimalVisitor feeder = new AnimalFeeder();
for(IAnimal animal : animals) {
animal.visit(feeder, null);
}
您可以完全自由地处理类中的任何层次结构。只需将visit()
每个动物类类型的IAnimalVisitor
.