多事件侦听器和适配器

时间:2014-10-12 16:35:10

标签: java android events listener

我正在为Tree创建自定义事件侦听器。我在这里创建了一个监听器接口

public interface TreeActionListener extends EventListener {
    public void onAddNode(TreeEventObject eventObject);
    public void onRemoveNode(TreeEventObject eventObject);
    public void onRenameNode(TreeEventObject eventObject);
    public void onCreateNode(TreeEventObject eventObject);
}

此外,我在这里创建了名为TreeEventObject的自定义事件对象,代码为

public class TreeEventObject extends EventObject {
    private Object dataToPass =null;
    /**
     * Constructs a prototypical Event.
     *
     * @param source The object on which the Event initially occurred.
     * @throws IllegalArgumentException if source is null.
     */

    public TreeEventObject(Object source, Object dataToPass) {
        super(source);
        this.dataToPass = dataToPass;
    }
    public Object getPassedData() {
        return this.dataToPass;
    }
}

正如jdk中提到的那样,适配器被广泛使用。当我在监听器接口中有很多方法时使用它,但我只需要一个方法。 所以我创建了我的适配器

public class TreeActionAdapter implements TreeActionListener {
    @Override
    public void onAddNode(TreeEventObject eventObject) {

    }

    @Override
    public void onRemoveNode(TreeEventObject eventObject) {

    }

    @Override
    public void onRenameNode(TreeEventObject eventObject) {

    }

    @Override
    public void onCreateNode(TreeEventObject eventObject) {

    }
}

但我对一件事感到有些困惑。我想尽可能地编写代码并使用模式。所以我想知道下一步做什么是最优雅的方式。 我的课程让我的听众成为了领域。 我有四个不同的事件可以发生。那么什么是发射事件的正确方法。 我有一些想法,但不知道哪个更好。

  1. 只创建一个fireEvent方法,该方法应检查已执行的事件类型。如果是,否则。如果要这样做,我应该创建例如enum并在我的事件对象中创建字段类型,而不是在构造函数中设置它,并在稍后的fireEvent方法中检查它。并且根据类型调用来自侦听器列表的不同方法。例如:

      if(event.type==NODE_ADD) {
        for (TreeActionListener listener: listeners) {
            listener.onAddNode(event);
        }
        }else 
        if(event.type==NODE_DELETE) {
        for (TreeActionListener listener: listeners) {
            listener.onDeleteNode(event);
        }
         }
    
    1. 使用不同类型的fireEvent方法:fireAddEvent,fireDelete event .......依赖于此,还调用不同的侦听器方法。

    2. 为每种类型的侦听器创建单独的数组。并且也使用特殊的fireEvent方法。

  2. 我不知道什么是更好和更好的做法。请建议其他一些实施或之前列出的最佳实施。 提前致谢

1 个答案:

答案 0 :(得分:0)

我会考虑使用4种不同的防火方法。改变方法参数的行为对我来说并不是很干净。

让您的类具有添加/删除侦听器方法(从某种集合中添加/删除这些侦听器)。然后是4种火灾方法(每种类型的事件一种,通过你的听众调用正确的方法循环),我觉得生活应该很好。