我認爲你應該實現Observer設計n模式(http://en.wikipedia.org/wiki/Observer_pattern),而不使用.NET的事件。在我的方法中,您需要定義幾個接口並添加一些代碼。對於每一個不同類型的事件,創建一個對對稱接口
public interface IEventXDispatcher
{
void Register(IEventXHandler handler);
void Unregister(IEventXHandler handler) throws NotSupportedException;
}
public interface IEventXHandler
{
void Handle(Object sender, Object args);
}
X表示事件的具體名稱(點擊,按鍵響應,EndApplication,WhateverYouWant)。 然後讓你觀察到的類實現IEventDispatcher,請和你的觀察器類(ES)實施IEventHandler
public class Dispatcher implements IEventXDispatcher, IEventYDispatcher ...
{
private List<IEventXHandler> _XHandlers;
private List<IEventYHandler> _YHandlers;
void Register(IEventXHandler handler)
{
_XHandlers.Add(handler);
}
void Unregister(IEventHandler handler) throws NotSupportedException
{
//Simplified code
_XHandlers.Remove(handler);
}
private MyMethod()
{
[...]
for(IEventXHandler handler: _XHandlers)
handler.Handle(this, new AnyNeededClass())
[...]
}
//Same for event Y
所有的代碼都是手寫的。我對Java有一點經驗,但我相信這種模式可能對你有幫助!
所以在我調用'game.pushEvent(e)'後,我應該調用'ChangeObject changes = game.getChanges()'或者什麼?爲了傳遞信息,似乎很陌生。 – 2010-10-10 22:29:41
我通常只是創建一個小接口,而不是創建一個ChangeObject類,然後將該接口直接放在遊戲中。如果它太複雜了,你可以稍後拆分另一個類,並使用依賴注入將它傳遞給遊戲和窗口。 – Lunivore 2010-10-11 08:22:24