2

メソッド パラメーターで操作のコールバックを定義することは、オブジェクトで定義してセッターを介して設定するよりも悪いのではないかと考えていましたが、設計パターンに関してです。

コールバックの作成に関する設計パターンが存在するかどうかはわかりません。

たとえば、クラス A があり、メソッド M をコールバックで実行したいとします。

public class A {
    public interface Callback {
        void onEvent();
    }
    public static methodM(...) {
        // ...
    }
}

私はこれを行うことができます:

public static void methodM(Callback c) {
    c.onEvent();
}
// ...
A.method(this); // The class that calls the method is the callback!

それ以外の:

public static void setCallback(Callback callback) {
    this.callback = callback;
}
public static void methodM() {
    this.callback.onEvent();
}
// ...
A.setCallback(this); // The class that calls the method is the callback!
A.method(); 

メソッドが静的であるという事実は、シナリオの理解を容易にするためであることに注意してください。

では、最初のアプローチを有効な設計として使用できますか?

最初のシナリオを使用する理由は、リスト、オブザーバーなどを使用してコールバックのリストを制御する必要があるため、複数回実行するための単純なコールバックを簡単に定義できるようにメモリ リークを回避するためです。

4

2 に答える 2

1

パターンの問題ではないと思いますが、いくつかの原則では、コールバックをクラスフィールドに保存することをお勧めします。

  • 単一責任の原則:A彼がしなければならないことを言わないでください。
  • デメテルの法則:仕事が何をしなければならないかは、誰も知らないA
  • オープン クローズの原則: いつか他の状況で Callback を呼び出したいと思うかもしれません。

他にもいくつかの原則がありますが、これらが最も重要だと思います。

于 2014-10-28T11:51:06.357 に答える
1

「コールバックパターン」はないと思います。あまりにも一般的です。

しかし、オブザーバー パターンビジター パターンなど、多くのデザイン パターンはコールバックを使用します。

プログラムのグローバルアーキテクチャに依存します

そのコード片

public static void methodM(Callback c) {
    c.onEvent();
}
// ...
A.method(this); // The class that calls the method is the callback!

気にしません、このように提示されても禁止されているわけではありません

于 2014-10-28T11:39:36.570 に答える