java - Java中的事件监听器

原文 标签 java apache-commons event-listener

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

import java.util.EventListener;

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

    public void postOperation();
}


然后,我实现此接口,如下所示:

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 */
    }
}


完成这些工作后,我将编写我的Base类的实现并实现operation_1方法。
我通过java.util.EventListener标记接口执行此方法,但是在设计我的问题后,请参见另一个类:


java.util包中的抽象类EventListenerProxy。
org.apache.commons.lang3.event包中的EventListenerSupport通用类。


我不知道永远不要使用这些类。我想知道两件事:


您对我的设计的看法(好坏)
事件侦听器方法的最佳实践(通过所述类或任何第三方框架)

最佳答案

在不知道应该解决哪个问题的情况下,很难讨论特定的设计。

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

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

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

相关文章:

java - 如何通过代码运行Java命令而不创建新进程?

java - 如何构造一个Apache Commons 3.1 Range <Integer>对象

javascript - 如何在Javascript中仅执行一次事件处理程序?

javascript - 如何为 'addEventListener' 方法添加别名?

events - 如何触发附加到 ZF2 中的共享事件管理器的事件?

java - JPA 为每个项目选择最新的实例

java - 尽管执行正确,executeUpdate()返回零

java - 如何在 Android 5.0 (API 21) 之前确认设备凭据?

java - 使用反射输出对象中变量的所有值

java - Commons将上传的文件内容转换为字符串值