こんにちは、今日は JavaScript でよく使われることを共有したいと思います。コールバックについてお話します。これをいつ、どのように使用するか知っていますか? Java 環境での使い方を本当に理解していますか?これらの質問を自分自身に問いかけたとき、それが私がこれを研究し始めた理由です。この背後にある考え方は、制御の反転です (追記: Wikipedia の説明は制御の反転、IoC と略されます)。これは、コンピューター コード間の結合を減らすために使用できるオブジェクト指向プログラミングの設計原則です。) この例は、次のとおりです。これもよく知られている「ハリウッドの原則 - 電話しないでください、私たちが電話します」に基づいて、フレームワークがどのように機能するかを説明しています。
これを理解するには、Java の単純なコールバック パターンを使用します。具体的な例は次のとおりです。
インターフェース CallBack { void methodToCallBack();}class CallBackImpl は CallBack を実装します { public void methodToCallBack() { System.out.println("コールバックされました") }}class Caller { public void register(CallBack callback) { callback .methodToCallBack(); } public static void main(String[] args) { 呼び出し元 caller = new CallBack = new CallBackImpl(); caller.register(callBack);
これをいつ使用するのか、あるいは直接呼び出しとコールバック メカニズムの違いは何なのか、尋ねたいかもしれません。
答えは次のとおりです。この例は、Java 環境でそのようなコールバック関数を構築する方法を示しているだけです。もちろんそんな使い方をしても意味がありません。では、さらに詳しく見てみましょう。
その中にある考え方は、制御の反転です。実際の例としてタイマーを使用してみましょう。時間ごとのコールバックをサポートする特別なタイマーがあることを知っているとします。正確に言うと、1時間ごとにタイマーが登録した呼び出しメソッドを呼び出すことを意味します。
具体的な例:
Web サイトを 1 時間ごとに更新したいと考えています。例の UML モデルは次のとおりです。
コールバックインターフェイス:
まずコールバック インターフェイスを定義しましょう。
import java.util.ArrayList;import java.util.List;// 例: このインターフェイスが実装されるように OS から提供されていると仮定しますinterface TimeUpdaterCallBack { void updateTime(long time);}// これが実装です。/ / 例: Web サイトの時刻を 1 時間ごとに更新したい場合class WebSiteTimeUpdaterCallBackimplements TimeUpdaterCallBack { @Override public void updateTime(long time) { // 更新された時刻を出力しますWeb サイトのサンプル内の任意の場所 System.out.println(time) }}
この例では、システム タイマーはコールバック メソッドをサポートしています。
// これは、オペレーティング システム (OS) によって実装された SystemTimer です。// このタイマーがどのように実装されるかはわかりません。// この例では、コールバックがどのように実装されるかを示しています。 class SystemTimer { List<TimeUpdaterCallBack> callbacks = new ArrayList<TimeUpdaterCallBack>(); public void registerCallBackForUpdatesEveryHour(TimeUpdaterCallBack); timerCallBack) { callbacks.add(timerCallBack); } // ... この SystemTimer にはさらに多くのロジックがある可能性がありますが、これはわかりません ... // この SystemTimer の実装のある時点では (わかりません) / / このメソッドが呼び出され、登録されたすべての timerCallBack が // 呼び出されます。登録されたすべての timerCallBack には、 // メソッド updateTime() がまったく異なる実装があり、 // 異なるクライアントによって異なる方法で使用される可能性があります。 oneHourHasBeenExprired() { for (TimeUpdaterCallBack timerCallBack : callbacks) { timerCallBack.updateTime(System.currentTimeMillis()) } }}
最後に、ダミーの簡単な例の Web サイト時刻アップデーターを次に示します。
// これは WebSite の例で使用されます。// WebSiteTimeUpdater { public static void main(String[] args) { SystemTimer SystemTimer = new SystemTimerCallBack; webSiteCallBackUpdater = 新しい WebSiteTimeUpdaterCallBack(); SystemTimer.registerCallBackForUpdatesEveryHour(webSiteCallBackUpdater);
原文: http://cleancodedevelopment-qualityseal.blogspot.com/2012/10/ Understanding-callbacks-with-java.html