我的系統出現問題\設計問題。我將從我開始的地方開始:有沒有提供更有效解決方案的設計模式?
我在Java中創建了一個遊戲引擎,並且遊戲組件通常需要引用遊戲的主\單例實例(世界,文件系統等) - 所以我使我的Game類成爲Global類中的靜態全局變量。每當在代碼中,我需要打開一個文件時,我會寫類似:
Global.game.getFilesystem()中openFile(...)
我們根本沒有切實可行的辦法,不斷繞過這一遊戲目的。我一直在避免像瘟疫一樣的單身設計模式,寧可用我的方式圍繞這一個...
無論如何,現在我有我的GameCore庫,就是這樣。我現在正在實施一個遊戲。顯然,在這個過程中我想擴展遊戲。問題是,現在我的類需要一種方便的方式來訪問相同類型的資源 - 這一切都很好 - 除了它不能使用Global.game,因爲Global.game只能被引用爲抽象類Game(即使它包含MyRpgGame的一個實例),我可能需要MyRpgGame類型的實例。當然,我可以打字,但它在整個代碼中都是混亂不變的。所以唯一的解決方案,我想出了(雖然我真的不喜歡它...)是這樣的:
在哪裏我通過去Game.game,或RpgGame.game等參考遊戲...
public abstract class Game
{
...
public static Game game = null;
public Game()
{
if(game != null)
throw new InitializationException("Cannot instantiate multiple instances of game.");
game = this;
...
}
然後在我的RpgGame,我躲在遊戲靜態場比賽:
public class RpgGame extends Game
{
public static RpgGame game = null;
public RpgGame()
{
if(game != null)
throw new InitializationException("Cannot instantiate multiple instances of game.");
game = this;
}
這實際上是單身模式。你沒有迴避任何事情。 –
問自己的問題是爲什麼圖書館中的許多對象需要引用遊戲對象? – flup
@Flub因爲有一款遊戲 - 所有遊戲組件都自然依賴它。他們使用相同的文件系統,並共享相同的遊戲世界。 – Jeremy