Java 通过新运算符或某些接口进行对象分配
我正在浏览一段Java代码,我看到对象是使用一些接口分配的,这个接口包含一些使用Java 通过新运算符或某些接口进行对象分配,java,Java,我正在浏览一段Java代码,我看到对象是使用一些接口分配的,这个接口包含一些使用new操作符分配对象的方法。我无法理解他们为什么使用接口而不是使用new操作符直接分配对象。e、 g: Animal animal = new Animal(); 或 Animal animal = interface.allocateAnimal() 这里的interface是一个接口,它有一个方法allocateAnimal,除了 新动物() 所以,最终我们做的是同样的事情,但方式不同,那么我们从中得到了什么
new
操作符分配对象的方法。我无法理解他们为什么使用接口而不是使用new
操作符直接分配对象。e、 g:
Animal animal = new Animal();
或
Animal animal = interface.allocateAnimal()
这里的interface
是一个接口,它有一个方法allocateAnimal
,除了
新动物()
所以,最终我们做的是同样的事情,但方式不同,那么我们从中得到了什么呢
编辑1:实际上接口是在其他地方实现的。所以接口不包含任何实现代码,它只包含方法。首先,接口不分配任何内容。他们只是在订立合同 你在那里看到的就是这个。有人决定实现该接口,具体实现的方法是创建一个
Animal
对象。您可以查看该模式的链接,在那里您将找到有关factory方法的详细说明
这里有一个关于使用工厂模式的原因的例子,它可能值得一看。关键是:
…使用工厂允许消费者创建新的
对象,而不必知道它们是如何创建的,或者
他们的依赖性是什么-他们只需要提供信息
他们真的想要
还有一点:编写您正在阅读的代码的人可能会试图引用某个东西的编程接口,而不是java中的技术
接口关键字。这意味着。我认为接口中实际上没有任何代码,因为接口不能有实现
但是,您希望使用interface.allocateAnimal()的原因是,有时您不知道要从哪种动物获得新的。
它可能是马、狗、猫等
只有在运行时你才知道。因此,接口对象在运行时是一个实现,例如Cat,Cat对象将有一个新的Cat()
,它将返回。这是一个称为工厂方法的设计模式
注意:虽然一个类有一个API(应用程序编程接口),“接口”本身有一个特殊的含义/在Java中是一个关键词。由于您的示例具有该方法的实现,因此它不能是接口
编辑
如果它真的是Java接口,那么您可能会看到抽象工厂设计模式的实现:
那么Cat
会分配一个新的Cat
并返回它吗?没什么意义。读@AdamAroldanswer@icepack对我觉得有道理:)