我有一个条件,我需要使用可以接受不同类型对象的固定方法签名。我认为一种解决方案是使用一个超类,并让所有作为子类。但是有什么好的优雅的设计模式解决方案可以解决这个问题
同样,一旦方法获得某种类型的对象,我们可以在不检查 instanceof 的情况下知道实例的类型吗?请建议。
我有一个条件,我需要使用可以接受不同类型对象的固定方法签名。我认为一种解决方案是使用一个超类,并让所有作为子类。但是有什么好的优雅的设计模式解决方案可以解决这个问题
同样,一旦方法获得某种类型的对象,我们可以在不检查 instanceof 的情况下知道实例的类型吗?请建议。
实现接口是比继承超类更好的模式。这样,您的类就保留了它们的单一继承能力。
关于 的另一个问题instanceOf
,很少有真正需要确定对象的实际类别。你总是可以诉诸多态性。将需要调用的所有方法放在接口本身的对象上。这样,您将永远不需要知道实际类型。
你的问题有点模糊,可以用两种不同的方式解释:
在一个类中实现不同的行为
假设您有两个不同的类: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();
}
}