我们使用基类和事件监听器方法设计应用程序,即基类和事件监听器接口(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)执行此方法,但在设计后我的问题看到另一个类:
- java.util包中的抽象类EventListenerProxy。
- org.apache.commons.lang3.event 包中的 EventListenerSupport 泛型类。
我不知道从来没有使用过这些类。我想知道两件事:
- 您对我的设计的意见。(好或坏)
- 事件监听器方法的最佳实践。(通过所述类或任何第三方框架)
最佳答案
如果不知道某个特定设计应该解决哪个问题,就很难讨论它。
无论如何,您的设计的主要问题是您只能有一个监听器。使用 EventListenerSupport
可以轻松支持多个事件监听器,并且可以轻松实现添加/删除监听器方法。
另一个问题是您的监听器方法不采用任何事件作为参数。这使得单个监听器无法监听多个 Base
实例,因为它无法使用事件来检测事件源。
关于java - java中的事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9341202/