java - java中的事件监听器

标签 java apache-commons event-listener

我们使用基类和事件监听器方法设计应用程序,即基类和事件监听器接口(interface)。基类在调用任何操作后调用适当的事件监听器方法。以下代码显示了我的设计:

import java.util.EventListener;

public interface MyEventListener extends EventListener
{
    public void preOperation();

    public void postOperation();
}

然后我按如下方式实现该接口(interface):

class MyEventListenerImpl implements MyEventListener
{
    @Override
    public void postOperation()
    {
        System.out.println("Do previous operation");
    }

    @Override
    public void preOperation()
    {
        System.out.println("Do post operation");
    }
}

然后我编写基类如下:

abstract class Base
{
    private MyEventListener eventListener; /* this member injected */

    public abstract void operation_1();

    public void doOperation_1()
    {
        eventListener.preOperation(); /* call listener before invoking main operation_1 implementation */

        operation_1(); /* call main operation_1 implementation */

        eventListener.postOperation(); /* call listener after invoking main operation_1 implementation */
    }
}

完成这些工作后,我编写了基类的实现并实现了 operation_1 方法。 我通过 java.util.EventListener 标记接口(interface)执行此方法,但在设计后我的问题看到另一个类:

  1. java.util包中的抽象类EventListenerProxy
  2. org.apache.commons.lang3.event 包中的 EventListenerSupport 泛型类。

我不知道从来没有使用过这些类。我想知道两件事:

  1. 您对我的设计的意见。(好或坏)
  2. 事件监听器方法的最佳实践。(通过所述类或任何第三方框架)

最佳答案

如果不知道某个特定设计应该解决哪个问题,就很难讨论它。

无论如何,您的设计的主要问题是您只能有一个监听器。使用 EventListenerSupport 可以轻松支持多个事件监听器,并且可以轻松实现添加/删除监听器方法。

另一个问题是您的监听器方法不采用任何事件作为参数。这使得单个监听器无法监听多个 Base 实例,因为它无法使用事件来检测事件源。

关于java - java中的事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9341202/

相关文章:

javascript - 取消订阅事件监听器 react Hook

java.security.NoSuchAlgorithmException : Cannot find any provider supporting Blowfish/ECB/PKCS5Padding

java - 重建一些代码以根据概率返回损坏或未命中(游戏)

java - SonarQube 与 Apache Commons Lang3 中的 Validate 类

java - Apache Commons Configuration2 如何从 InputStream 读取数据

javascript - addeventlistener 不能使用一个按钮多次工作

java - 0MQ ROUTER DEALER 范例在 Docker 容器中不起作用

java - 仅当匹配阈值字节时才在映射中填充字符串值

java - 使用 apache.commons.math 库处理 java "cannot find symbol"错误

php - Silex 2 addListener 触发错误