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
   }
}

1 つの可能性は、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

または、コンポーネント レジストリ (基本的には ) を作成し、その ID をレジストリのキーとして使用しMap<String,Grid>てグリッドをフェッチします。SomeBackendService(リフレッシュしたいグリッドはわかっていると思いますよね?)

ただし、レジストリには注意してください。

  • 必要に応じて、それらがスレッドセーフであることを確認してください(おそらくUIアプリではそうです)
  • 適切に処理しないと、メモリがいっぱいになり、メモリリークする傾向があります
于 2013-03-22T14:06:49.783 に答える
-2

Sorry for not answering that long time, i was in vacation.

Interfaces are some kind of classes. But they do not implement any method, they have empty method bodies.

Each class, which implements an interface usually MUST implement its methods.

In C# You would Do :

enter code here

    interface IMyInterface
    {
       void PleaseImplementMe();
    }


    class clMyInterface :IMyInterface
    {

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





end

Please let me know, whether this is what can help You or not.

于 2013-04-15T15:23:17.160 に答える