从超类中找出具体实现

时间:2013-06-05 23:21:51

标签: concreteclass

我正在尝试重构大型代码库的一部分,并且处于代码类似的地方 -

abstract class Animal {
    String type;
}

class Dog extends Animal {
    public Dog() { type = "DOG"; }
}

 class Cat extends Animal {
    public Cat() { type = "CAT"; }
 }

现在代码库中有很多方法都采用了List<动物>作为输入,所以我不想打扰那些接口。在许多这些方法中,通常迭代列表,并根据列表中每个对象的Animal对象的“type”属性完成一些处理。为此,我必须做一些丑陋的垂头丧气,从动物到猫或狗。 例如:

class Processor {
    public void process(List<Animal> animals) {
        for(Animal animal: animals) {
            if(animal instanceof Dog) { // or if type.equals("DOG")
                Dog dog = (Dog) animal;
                dog.bark();
            } else if {....}
        }
    }

}

我想知道是否有其他方法可以做到这一点。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

如果您可以改进Animal类以更好地捕获此类对象的预期行为,那应该是第一件事。

除此之外,从给定的信息中我没有多少建议。