通过新运算符或某个接口进行对象分配

时间:2013-05-15 09:02:21

标签: java

我正在浏览Java代码,我看到已经使用某个接口分配了对象,并且此接口包含一些使用new运算符分配对象的方法。我无法想到为什么他们使用接口而不是直接使用new运算符分配对象。 e.g:

Animal animal = new Animal();

Animal animal = interface.allocateAnimal()

此处interface是一个具有方法allocateAnimal的接口,它只执行任何操作 new Animal()

所以最终我们做的是同样的事情,但是以不同的方式,所以在这里获得了什么?

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

3 个答案:

答案 0 :(得分:6)

首先interface没有分配任何内容。他们只是建立合同。

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

这里有一个question关于使用可能值得检查的工厂模式的原因。以下是重点:

  

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

还有更多内容:编写您正在阅读的代码的人可能会尝试引用某些不是java中的技术interface关键字的编程接口。这意味着something else

答案 1 :(得分:4)

这是一种名为Factory Method的设计模式。

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

修改

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

答案 2 :(得分:2)

我认为接口中实际上没有代码,因为接口无法实现。

但是,您之所以要使用interface.allocateAnimal(),有时您不知道要从哪个动物获取新动物。 它可能是马,狗,猫等。

只有在运行时才知道。因此,接口对象在运行时将是一个实现,例如Cat,而Cat对象将返回一个new Cat()