我對Java相當陌生。我來自PHP,我曾經使用magic __get和__set方法在php中創建註冊表類。因此,該系統的其他部分可以輕鬆做到:Java註冊表類?
registry.foo = new Foo();
我應該提到我正在嘗試創建遊戲引擎。這是我在Java中ATM註冊表:
class Registry {
private static Map<String, Object> box = new HashMap<String, Object>();
public static Object get(String key) {
if (Registry.box.get(key) != null) {
return Registry.box.get(key);
}else {
return null;
}
}
public static void set(String key, Object o) {
Registry.box.put(key, o);
}
}
然後對系統訪問註冊表的其他部分,我現在需要這件事:
((Object) Registry.get("Object")).doSomething();
這實在是一個很大的代碼。在PHP中,這將通過簡單地完成:
Registry.foo.doSomething();
任何方法來使這一點更簡單?我想我可以讓公共領域,但隨後regsitry類需要隱式創建這些領域的新對象的可能性,可能需要添加哪些是未知的註冊表類本身,這是..討厭:P
提前致謝!
嗯。依賴注入?好吧,你有什麼建議我應該做什麼? 我擁有的是運行gameloop等遊戲的主要對象。 它有一個GameSystems的公共場HashMap,它在gameloop中運行每個GameSystems.update()方法。其中一個系統是世界系統,當運行world.update()時,它會運行一個「實體」的散列圖,該實體也具有.update()以及.render()。事情是,一些實體和一些遊戲系統需要向主遊戲課程詢問某些事情。或者有些遊戲系統需要與其他遊戲系統進行通信。 –
@PetterThowsen我將編輯答案以包含您提到的類的示例。這就是說,這是一個臭名昭着的模式,你應該在互聯網上發現它討論的噁心。 Java也有一大堆實現它的框架(Spring,Guice,Meld/CDI)。 – millimoose