0

我如何从一个不是另一个类中的对象的类中调用一个方法,并且与另一个类没有任何共同之处?

就我而言:

class GridUI {
    com.google.gwt.user.cellview.client.DataGrid grid;

    public void refresh() {
         dataGrid.redraw();
    }
}

class SomeBackendService() {
   public foo() {
      //have to trigger refresh of a specific grid
   }
}

一种可能性可能是使refresh()and grid static。但这是糟糕的设计,我不能使用这种方法,因为我想使用GridUI.

那么,如何从不包含此网格作为对象的任何服务刷新我的应用程序中的某个网格类?

4

3 回答 3

4

只需在您的服务中创建并触发Event它,并让您的网格注册它Event。最好使用EventBus.

使用Map<String, Grid>接受的答案中建议的静态将起作用,但它不合适。您可能会犯错误,并且当网格数量增加时,管理起来并不容易。

这种EventBus方法需要更多的前期工作,但最终它是一种更好的方法。您将能够重用EventBus整个应用程序。它确实有助于降低耦合度。您还可以轻松地让不同的对象作用于相同Event的对象。

于 2013-03-22T14:13:04.893 回答
0

或者创建一个组件注册表(基本上是 a ),然后使用其 id 作为注册表中的键来Map<String,Grid>获取网格。SomeBackendService(我想你知道要刷新哪个网格,对吧?)

不过要小心注册表:

  • 如果需要,确保它们是线程安全的(在 UI 应用程序中可能是这样)
  • 如果处理不当,它们往往会填满和泄漏内存
于 2013-03-22T14:06:49.783 回答
-2

很抱歉这么长时间没有回答,我正在休假。

接口是某种类。但是它们没有实现任何方法,它们有空的方法体。

每个实现接口的类通常必须实现它的方法。

在 C# 中你会做:

enter code here

    interface IMyInterface
    {
       void PleaseImplementMe();
    }


    class clMyInterface :IMyInterface
    {

        void  IMyInterface.PleaseImplementMe()
        {
            MessageBox.Show("One implementation");
        }    
    }





end

请让我知道,这是否可以帮助您。

于 2013-04-15T15:23:17.160 回答