2015-10-05 102 views
0

我目前正在創建一個地牢爬行器。我在一個名爲「地下城」的類中處理所有的地牢世代,碰撞盒世代,寶物和敵方世代以及玩家世代。在地牢類中創建的每個對象都有一個getter。訪問其他類中對象的最有效的做法:Java

在Main類中,我使用動畫計時器來處理玩家移動,打開寶藏等的所有更新。這需要訪問Dungeon類中創建的許多對象。

我想更好地理解Java中對象引用的使用和好處。我的問題是:因爲我訪問數百或數千次以後,訪問Dungeon類(或任何其他類)中的變量的更有效的方法是什麼?

例如,地牢中的所有寶藏都在一個ArrayList變量中,該變量是Dungeon類的成員變量。所以,我可以像這樣在我的Main類中檢索數組列表:dungeon.getTreasureList()。如果我需要獲取該ArrayList中的特定項目,我可以使用:dungeon.getTreasureList().get(i)其中i是我想要的寶藏對象的索引。這對於短時間的通話來說很好(組織上來說),但是對於如此長的通話會變得非常混亂:dungeon.getPlayer().topIntersects(dungeon.getCollisions().getWalls())

或者,我可以在我的Main中創建一個對寶貝列表的引用,如下所示:ArrayList<Treasure> treasure = dungeon.getTreasureList()。然後,如果我需要ArrayList中的特定對象,我可以調用:treasure.get(i)。這可以清理上面的長途電話,更像這樣:player.topIntersects(collisions.getWalls());。這樣更容易閱讀,因此我更喜歡這種方法。

忽視組織優勢,創建一個訪問變量來訪問信息的參考,或使用更長的表單和獲得者(如dungeon.getTreasureList().get(i))是一個更好的做法嗎?

看起來,通過在呼叫dungeon.getPlayer().topIntersects(dungeon.getCollisions().getWalls())中爲玩家和碰撞創建參考,我使用player.topIntersects(collisions.getWalls());保存了兩個函數調用。即,一個函數調用dungeon.getPlayer()和一個調用dungeon.getCollisions()

由於在遊戲運行過程中這被稱爲數千次,因此假設我正在將數千個函數調用保存到dungeon.getPlayer()dungeon.getCollisions(),從而生成更高效的代碼似乎是安全的。在這個假設中,我是對的嗎?

編輯:設法使問題更客觀和更少的輿論基礎和糾正誤導性的措辭

+1

我覺得這是一種代碼味道;也許試着重新組織你的邏輯和班級責任。請記住**單一責任原則** https://en.wikipedia.org/wiki/Single_responsibility_principle – Michael

+0

我應該澄清一點,地牢類處理所有對其他生成類的調用。地下城地圖是在自己的班級中生成的,寶藏是在自己的班級中生成的,敵人是在自己的班級中生成的,等等。我重構了一些Main,以確保在更新循環中發生更改時,主要負責更新和重新呈現。 – MKreegs

回答

4

我的看法是,這個問題將很快關閉,因爲它太發表意見的。

但是,如果我提供我的意見,我會說讓課程訪問私人收藏,然後與他們合作是封裝差。

更好地隱藏這些細節,並提供方法來提供所需的信息,而不會泄露私人信息。

+0

我試圖編輯我的問題,使其更少的意見和更客觀。感謝您指出了這一點。我仍然在學習如何最好地使用SO。 – MKreegs

相關問題