我有一个条件,我需要使用固定的方法签名,可以接受不同类型的对象。我认为一个解决方案是使用超类,并将所有作为子类。然而,我们解决这个问题是否有任何优秀的设计模式解决方案
一旦方法获得某种类型的对象,我们可以知道没有instanceof检查的实例类型吗? 请建议。
答案 0 :(得分:1)
实现接口是一种比继承超类更好的模式。以这种方式,你的类保留了它们的一个继承容量。
关于instanceOf
的另一个问题,很少有真正需要确定对象的实际类。你总是可以诉诸多态。将您需要调用的所有方法放在接口本身的对象上。这样你就不需要知道实际的类型了。
答案 1 :(得分:1)
您的问题有点不透明,可以用两种不同的方式解释:
在一个班级中实施不同的行为
假设您有两个不同的类:Cat
和Dog
。然后你有一个班级Animals
,并希望做这样的事情:
Cat cat = new Cat();
Dog dog = new Dog();
Animals animals = new Animals();
animals.feed(cat);
animals.feed(dog);
此处feed()
执行不同的代码,具体取决于参数类型:
public class Animals {
public void feed(Cat cat) {
// ... feed the cat
}
public void feed(Dog dog) {
// ... feed the dog
}
}
在不同的类中实施不同的行为
另一方面,你可以定义一个提供方法的接口Pet
,比方说eat()
:
public interface Pet {
void eat();
}
然后Cat
和Dog
应该实施Pet
以获得不同的行为:
public class Cat implements Pet {
public void eat() {
//...
}
}
public class Dog implements Pet {
public void eat() {
//...
}
}
然后你的班级Animals
会是这样的:
public class Animals {
public void feed(Pet pet) {
pet.eat();
}
}