有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java多事件侦听器和适配器

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

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和create字段类型来设置它,然后在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事件。。。。。。。根据这一点,还可以调用不同的侦听器方法

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

我不知道什么会更好,更好的做法。请建议一些其他的实施方案,或是之前列出的最佳方案。 提前谢谢


共 (1) 个答案

  1. # 1 楼答案

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

    只要让你的类有一个添加/删除侦听器方法(从某种集合中添加/删除这些侦听器)。然后是4种激发方法(每种类型的事件对应一种,通过你的听众循环调用正确的方法),我认为生活应该很美好