在Java中是否可以让复合对象动态地将事件转发给它的子节点。他是我想要实现的榜样:
public interface Listener {
void onEvent();
void onAnotherEvent();
...
}
List<Listener> listenerList;
Listener listener = // some listener implementation that forwards methods to all Listeners in listenerList
主要问题是我希望这是动态的。否则,我可以自己制作一个子类,它有一个子列表并转发所有事件。我考虑过使用动态代理,但我想看看Java中是否有更好更有效的选项。
--- ---编辑
这是我最好的尝试。它有效,但有点限制。
public final class DynamicCompositionWrapper<T>
{
private final T parent;
private final List<T> children;
public DynamicCompositionWrapper(Class<T> cls)
{
children = new LinkedList<T>();
@SuppressWarnings("unchecked")
T temp = (T)Proxy.newProxyInstance(cls.getClassLoader(), new Class<?>[] {cls}, new InvocationHandler()
{
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable
{
for (T t : children)
{
method.invoke(t, args);
}
return null;
}
});
parent = temp;
}
public T getParent()
{
return parent;
}
public void addChild(T t)
{
children.add(t);
}
}