GWT Event Bus受益匪浅

时间:2018-09-18 23:30:51

标签: java gwt

我很难理解在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

1 个答案:

答案 0 :(得分:2)

无事件总线

示例:您可以直接从农场购买苹果。

system(("pkexec rm -rf "+pathi+"/'"+games[k]+"'").c_str());维护侦听器的集合。 Button知道所有侦听器,需要在循环中通知它们。 Button与处理程序直接耦合。

事件总线

示例:您从商店购买苹果,商店从农场购买苹果。这家商店是您和农场之间的经纪人。您不了解该场。农场不了解您。

事件总线是事件生产者和事件使用者之间的中介。事件生产者知道事件总线,但不是所有事件使用者。

Button不了解侦听器。它仅了解EventBus。 处理程序不了解Button。他们知道公共汽车。

摘要:

不带插件的应用程序可以不带事件总线来实现。

具有插件支持的应用程序应使用事件总线来实现,因为事先不知道有多少插件连接到事件产生器。