java - Libgdx:创建其他对象的对象

标签 java android architecture libgdx

我有一个关于简单游戏架构的一般性问题。 在我的游戏中,我有这些类:

  1. 负责绘制和渲染的主类。
  2. Ball 对象具有一些属性和执行某些操作的 update() 函数。

主类有一个包含所有现有球实例的数组,render() 函数负责遍历所有这些实例并调用它们的 update()。 此外,主类还有 createBall() 函数,用于创建另一个实例。

假设其中一个实例想要在游戏中创建另一个球(通过他的 update())。 哪种方法是正确的方法:

  1. 每个球都会在其构造函数中获取主类实例(主类在创建球时将其自身传递给球)并调用 main.createBall();
  2. 每个球都有一系列“请求”,主类会读取并理解球想要创建的内容。

这应该是一个通用问题,因为它定义了实例与主类通信的方式。

谢谢!

最佳答案

从 OOD 的角度来看,我会有第三个类(class),知道如何创造球。我将在 Main 中实例化它,并将其传递到构造函数中的 Ball 类。您可以将此类命名为 BallFactory。

Ball 类在想要创建 Ball 时将调用 addRequest(),而 Main 类在准备好进行实际创建时将调用 processRequests()。该列表本身将保留工厂的私有(private)实现细节,这很好encapsulation .

这给了我们更好的separation of concerns .

您建议的选项都可以工作,但从纯粹的面向对象的角度来看,它们并不理想,因为它们减少了 cohesion主类别(选项 1)或球类别(选项 2)。

关于java - Libgdx:创建其他对象的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30753565/

相关文章:

android - 在改造中发送可选字段和多部分

java - Android应用程序如何检测哪个组件正在执行网络请求?

java - 是否有与 java.util.concurrent.TimeUnit 等效的文件大小单元的 Java 枚举?

android - Android Studio将文件下载到的目录位于什么目录?

objective-c - 什么时候应该扩展 NSDocument,什么时候应该扩展 NSWindowController?

android - 什么是最好的应用程序架构?

c++ - 将一个模块的所有代码放在一个接口(interface)后面。好主意与否?

java - 如何正确打印这个三角形字符?

java - 有没有办法将javadoc集成到TestNG报告中

java - 当您添加超过 3 个元素时,底部导航栏会中断