我认为你应该实现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