2015-06-10 471 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()。 –