2013-06-21 45 views
1

我有其中i需要使用固定的方法签名可以接受不同类型的对象的条件。我认为一种解决方案是使用超类,并让所有的作为子类。然而,有没有什么好的优雅的设计图案种类的解决方案,我们解决这个如何包装不同类型的对象在一个单一的包装对象

也曾经方法获取某些类型的对象,我们可以知道实例没有instanceof检查类型?请提出 。

+1

没有足够的上下文。例如,该方法的签名是什么?另外,你并没有真正使用_method_(或者你在谈论一个'Method'实例吗?),但是一个接口或者抽象类或者... – fge

+1

为什么它不够优雅?你也可以使用一个接口,如果合适的话 – DPM

+0

这些对象有什么共同点? – UmNyobe

回答

1

你的问题是有点vaque,并可以以两种不同的方式来解释:

实施不同的行为在一个类

让我们假设你有两个不同的类别:CatDog。然后,你有一个类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(); 
} 

然后CatDog应实施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(); 
    } 
} 
+0

谢谢你的例子。我喜欢使用这个只具有多态性的接口 –

1

实现一个接口是一个更好的图案比inhering一个超类。这样你的类就保留了它们的单继承能力。

关于其他问题有关instanceOf,很少有真正需要确定实际对象的类。你总是可以求助于多态。把你需要调用的所有方法放在接口本身的对象中。这样你永远不需要知道实际的类型。

+0

感谢这个看起来不错的办法。 –

相关问题