我很难理解在GWT中使用事件总线概念的好处。 我已经看过很多例子,展示了如何使用它。我知道它是怎么制成的,但我不明白它为什么有帮助。
我举个例子:
Button button = new Button("click");
button.addListener(new ButtonListenerAdapter(){
@Override
public void onClick(Button button, EventObject e) {
doSomething() ;// must replace it with fireEvent later :(
}
});
为了在上述代码中添加事件总线功能,我们必须引入更多代码:
1)创建一个扩展事件的事件类(实现2方法)
2)为事件处理程序创建接口,其中dosomething()将是抽象的
3)实现界面
4)事件发生的类必须实现HasHandler接口,引入HandlerManager实例,实现fireEvent,注册事件并触发事件。
现在我的问题是,如果我有50个UI事件,我看不到将上述4个步骤复制到应有的好处。如果我不这样做,那我真正要面对的问题是什么。
编辑:
如果事件和事件处理程序在类中分开,是否真的使EventBus模式有趣?
AddContactEvent.java
AddContactEventHandler.java
RemoveContactEvent.java
RemoveContactEventHandler.java
答案 0 :(得分:2)
无事件总线
示例:您可以直接从农场购买苹果。
system(("pkexec rm -rf "+pathi+"/'"+games[k]+"'").c_str());
维护侦听器的集合。 Button
知道所有侦听器,需要在循环中通知它们。 Button
与处理程序直接耦合。
事件总线
示例:您从商店购买苹果,商店从农场购买苹果。这家商店是您和农场之间的经纪人。您不了解该场。农场不了解您。
事件总线是事件生产者和事件使用者之间的中介。事件生产者知道事件总线,但不是所有事件使用者。
Button
不了解侦听器。它仅了解EventBus。
处理程序不了解Button
。他们知道公共汽车。
摘要:
不带插件的应用程序可以不带事件总线来实现。
具有插件支持的应用程序应使用事件总线来实现,因为事先不知道有多少插件连接到事件产生器。