2015-06-10 231 views
0

我对一个简单的游戏体系结构有一种普遍的疑问。 在我的游戏中,我有这些类:Libgdx:创建其他对象的对象

  1. 主要负责绘图和渲染的类。
  2. 有几个属性的Ball对象和执行某些事情的update()函数。

主类有一个所有存在的ball实例的数组,render()函数负责运行所有这些实例并调用它们的update()。 另外,主类还有创建另一个实例的createBall()函数。我们假设其中一个实例想要在游戏中创建另一个球(通过他的update())。 哪种方式是这样做的正确方法:

  1. 每一个球在他的构造函数获取主类实例(主类创建时,它传递给自己的球),并调用main.createBall();
  2. 每个球都有一系列“请求”,主队读取并理解球想要创建什么。

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

谢谢!

回答

1

从OOD的角度来看,我会有第三堂课知道创造球。我将在Main中实例化它,并将它传递给构造函数中的Ball类。你可以调用这个类BallFactory。

当Ball想要创建一个Ball时,Ball类会调用addRequest(),当它准备好进行实际创建时,Main类将调用processRequests()。该清单本身仍然是工厂的私人实施细节,这是好的encapsulation

这给了我们更好的separation of concerns

您建议的选项都可以使用,但是从纯OO的角度来看,它们并不理想,因为它们会减少Main(选项1)或Ball(选项2)类的cohesion

+0

好的,Ball实例将调用BallFactory.addRequest()(它添加到BallFactory所具有的请求数组中),Main类将通过render()中的数组运行,并根据请求创建实例? –

+0

其实,为什么没有Main调用BallFactory的一个方法来处理列表呢?这样Main不需要在其中添加任何额外的代码。所以...... Ball会调用addRequest(),Main会调用processRequests() –

+0

所以基本上processRequests()会根据它的私有请求列表调用main.createBall()。 –