4

我正在查看 Java 代码,我看到对象已使用某个接口分配,并且该接口包含一些使用new运算符分配对象的方法。我想不出他们为什么使用接口而不是直接使用new运算符分配对象。例如:

Animal animal = new Animal();

或者

Animal animal = interface.allocateAnimal()

interface是一个接口,它的方法allocateAnimal除了 new Animal().

所以最终我们在做同样的事情,但以不同的方式,那么这里有什么收获呢?

编辑1:实际上接口是在其他地方实现的。所以接口不包含任何实现代码,它只包含方法。

4

3 回答 3

6

首先interfaces 没有分配任何东西。他们只是在建立合同。

您在那里看到的是工厂方法模式。有人决定实现该接口,具体实现的方法是创建一个Animal对象。您可以查看该模式的链接,在那里您将找到有关工厂方法的详尽说明。

这里有一个关于使用工厂模式的原因的问题,它可能值得一试。这是重点:

...使用工厂允许消费者创建新对象,而不必知道它们是如何创建的,或者它们的依赖关系是什么的细节——他们只需要提供他们真正想要的信息。

还有更多:编写您正在阅读的代码的人可能会尝试引用不是interfacejava中技术关键字的东西的编程接口。它意味着别的东西

于 2013-05-15T09:06:31.847 回答
4

这是一种称为工厂方法的设计模式。

注意:虽然类具有 API(应用程序编程接口),但“接口”本身具有特殊含义/是 Java 中的一个关键词。由于您的示例具有该方法的实现,因此它不能是接口。

编辑

如果它真的是一个 Java 接口,那么您可能会看到抽象工厂设计模式的实现: http ://en.wikipedia.org/wiki/Abstract_factory_pattern

于 2013-05-15T09:08:49.003 回答
2

我认为接口中实际上没有任何代码,因为接口不能有实现。

但是,您想使用 interface.allocateAnimal() 的原因是有时您不知道要从哪种动物那里获得新的动物。可以是马、狗、猫等。

只有在运行时才知道。所以接口对象在运行时将是一个实现,例如 Cat,并且 Cat 对象将有一个new Cat()它将返回的对象。

于 2013-05-15T09:07:11.307 回答