Java动态组合

时间:2014-10-30 00:39:06

标签: java design-patterns composite proxy-classes

在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);
    }
}

0 个答案:

没有答案