编写自定义事件时的java侦听器接口
我正在尝试编写自定义事件。我读到我应该有三样东西:1。组件类,2。事件类和3。侦听器接口
我的问题是,我必须在其中一个类中创建一组侦听器,如下所示:
public class MyEvent{
private Set<EventListener> = new HashSet<>();
public synchronized void addListener(EventListener listener){
listeners.add(listener);
}
//and the rest of the code for firing event ..
}
下面是界面:
public interface EventListener {
void hungry(MyEvent event);
}
我不明白拥有一套接口意味着什么
# 1 楼答案
一组接口基本上是一组接口,或者更通俗地说是一组接口
使用
HashSet
可以防止人们意外地添加同一个侦听器:同一个侦听器将具有相同的哈希代码,在这种情况下
HashSet.add
不会将元素添加到集合中。注意,接口也有hashCode
方法,因为它是在Object
中声明的添加两个相同的侦听器的坏处在于,从侦听器的角度来看,事件似乎发生了两次。根据事件的不同,这可能会产生很大的影响
我能想到的一种情况是,这是不可取的:
您正在编写一个游戏,事件侦听器处理“购买”按钮的点击。如果在用户只点击一次的情况下,侦听器被调用两次,玩家可能会意外地损失一些钱
# 2 楼答案
这里
Set
的每个元素都是事件的侦听器:在您的设计中,似乎多个订阅者可以订阅同一事件的通知
例如,假设您有一个事件:“应用程序已启动”。多个对象可能希望知道此通知事件
请注意,事件通常不会存储要访问的侦听器(或观察者)。存储它们是组件(或可观察对象)的角色。你还应该提供一种通知听众的方式。例如:
你可以这样设置对象之间的关系: