Javaコールバック関数とオブザーバモードインスタンスコード
3251 ワード
本論文で研究したのは主にJavaコールバック関数と観察者モードの実現であり,具体的な紹介と実現コードは以下の通りである.
オブザーバモード(publish)−サブスクリプションモード、モデル−ビューモード、ソース−リスナーモードまたはスレーブモードとも呼ばれる場合がある)は、ソフトウェア設計モードの1つである.このモードでは、1つのターゲットオブジェクトは、それに依存するすべてのオブジェクトを管理し、それ自体の状態が変化したときに自発的に通知を発行します.これは、通常、各観察者が提供する方法を呼び出すことによって達成される.このモードは、通常、イベント処理システムを実装するために使用される.
観察者モードを使用するタイミング:抽象モデルには2つの態様があり、そのうちの1つの態様は別の態様に依存する.これら2つを独立したオブジェクトにカプセル化して、それぞれ独立して変更および多重化できるようにします. 1オブジェクトの変更が同時に他のオブジェクトを変更する必要がある場合、具体的にどのくらいのオブジェクトが変更されるべきか分からない. オブジェクトが他のオブジェクトに通知しなければならない場合、他のオブジェクトが誰であるかを仮定することはできません.つまり、これらのオブジェクトが緊密に結合されていることを望んでいません.
実際には、観察者モードは、前述した橋渡し、戦略と共通の使用環境を持っています.変化を独立にカプセル化し、最大の再利用とデカップリングを達成します.観察者と後者の違いは,観察者モードにおける目標と観察者の変化が独立しているのではなく,いくつかの関連があることである.
JavaではObservableクラスとObserverインタフェースによりオブザーバモードを実現した.1つのObserverオブジェクトが1つのObservableオブジェクトの変化を監視しており、Observableオブジェクトが変化した場合、Observerは通知を受け、対応する作業を行うことができる.
出力結果:
countObservers = 2 ConcreteObserverB update ConcreteObserverA update callback onCall
まとめ
上記のコードから,コールバック関数は観察者モードの1つに属するべきであり,ループ機構の代わりにコンポーネント間の結合性を低下させることを目的としていることがわかる.オブジェクトモードではターゲットクラスがすべてのオブジェクトの参照を維持し、コールバックでは1つの参照を維持します.
以上がJavaコールバック関数とオブザーバーモードインスタンスコードに関するすべての内容であり,皆さんの役に立つことを願っている.興味のある方は引き続き当駅の他の関連テーマを参照することができます.不足点があれば、伝言を歓迎します.友达の本駅に対する支持に感谢します!
オブザーバモード(publish)−サブスクリプションモード、モデル−ビューモード、ソース−リスナーモードまたはスレーブモードとも呼ばれる場合がある)は、ソフトウェア設計モードの1つである.このモードでは、1つのターゲットオブジェクトは、それに依存するすべてのオブジェクトを管理し、それ自体の状態が変化したときに自発的に通知を発行します.これは、通常、各観察者が提供する方法を呼び出すことによって達成される.このモードは、通常、イベント処理システムを実装するために使用される.
観察者モードを使用するタイミング:
実際には、観察者モードは、前述した橋渡し、戦略と共通の使用環境を持っています.変化を独立にカプセル化し、最大の再利用とデカップリングを達成します.観察者と後者の違いは,観察者モードにおける目標と観察者の変化が独立しているのではなく,いくつかの関連があることである.
JavaではObservableクラスとObserverインタフェースによりオブザーバモードを実現した.1つのObserverオブジェクトが1つのObservableオブジェクトの変化を監視しており、Observableオブジェクトが変化した場合、Observerは通知を受け、対応する作業を行うことができる.
package com.demo.test;
import java.util.Observable;
import java.util.Observer;
// ,
public class ObserverCallbackDemo {
// A
static class ConcreteObserverA implements Observer {
@Override
public void update(Observable o, Object arg) {
System.out.println("ConcreteObserverA update");
}
}
// B
static class ConcreteObserverB implements Observer {
@Override
public void update(Observable o, Object arg) {
System.out.println("ConcreteObserverB update");
}
}
//
static class ConcreteObservable extends Observable {
public void changeValue() {
//protected
setChanged();
notifyObservers();
}
}
//
interface ICallback {
public void onCall();
}
//
static class CallbackDemo {
private ICallback callback;
public void setListener(ICallback callback) {
this.callback = callback;
}
public void call() {
callback.onCall();
}
}
public static void main(String[] args) {
//
ConcreteObserverA observerA = new ConcreteObserverA();
ConcreteObserverB observerB = new ConcreteObserverB();
ConcreteObservable observable = new ConcreteObservable();
observable.addObserver(observerA);
observable.addObserver(observerB);
System.out.println("countObservers = " + observable.countObservers());
observable.changeValue();
//
CallbackDemo callbackDemo = new CallbackDemo();
callbackDemo.setListener(new ICallback() {
@Override
public void onCall() {
System.out.println("callback onCall");
}
}
);
callbackDemo.call();
}
}
出力結果:
countObservers = 2 ConcreteObserverB update ConcreteObserverA update callback onCall
まとめ
上記のコードから,コールバック関数は観察者モードの1つに属するべきであり,ループ機構の代わりにコンポーネント間の結合性を低下させることを目的としていることがわかる.オブジェクトモードではターゲットクラスがすべてのオブジェクトの参照を維持し、コールバックでは1つの参照を維持します.
以上がJavaコールバック関数とオブザーバーモードインスタンスコードに関するすべての内容であり,皆さんの役に立つことを願っている.興味のある方は引き続き当駅の他の関連テーマを参照することができます.不足点があれば、伝言を歓迎します.友达の本駅に対する支持に感谢します!