我有其中i需要使用固定的方法签名可以接受不同类型的对象的条件。我认为一种解决方案是使用超类,并让所有的作为子类。然而,有没有什么好的优雅的设计图案种类的解决方案,我们解决这个如何包装不同类型的对象在一个单一的包装对象
也曾经方法获取某些类型的对象,我们可以知道实例没有instanceof检查类型?请提出 。
我有其中i需要使用固定的方法签名可以接受不同类型的对象的条件。我认为一种解决方案是使用超类,并让所有的作为子类。然而,有没有什么好的优雅的设计图案种类的解决方案,我们解决这个如何包装不同类型的对象在一个单一的包装对象
也曾经方法获取某些类型的对象,我们可以知道实例没有instanceof检查类型?请提出 。
你的问题是有点vaque,并可以以两种不同的方式来解释:
实施不同的行为在一个类
让我们假设你有两个不同的类别: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
}
}
这就是所谓的method overloading。
实现在不同的班级
另外不同的行为,你可以定义一个接口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();
}
}
谢谢你的例子。我喜欢使用这个只具有多态性的接口 –
实现一个接口是一个更好的图案比inhering一个超类。这样你的类就保留了它们的单继承能力。
关于其他问题有关instanceOf
,很少有真正需要确定实际对象的类。你总是可以求助于多态。把你需要调用的所有方法放在接口本身的对象中。这样你永远不需要知道实际的类型。
感谢这个看起来不错的办法。 –
没有足够的上下文。例如,该方法的签名是什么?另外,你并没有真正使用_method_(或者你在谈论一个'Method'实例吗?),但是一个接口或者抽象类或者... – fge
为什么它不够优雅?你也可以使用一个接口,如果合适的话 – DPM
这些对象有什么共同点? – UmNyobe