我正在浏览Java代码,我看到已经使用某个接口分配了对象,并且此接口包含一些使用new
运算符分配对象的方法。我无法想到为什么他们使用接口而不是直接使用new
运算符分配对象。 e.g:
Animal animal = new Animal();
或
Animal animal = interface.allocateAnimal()
此处interface
是一个具有方法allocateAnimal
的接口,它只执行任何操作
new Animal()
。
所以最终我们做的是同样的事情,但是以不同的方式,所以在这里获得了什么?
编辑1:实际上接口是在其他地方实现的。所以接口不包含任何实现代码,它只包含方法。
答案 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()
。