Javaコールバック関数と観察者モードの実例コード


本論文で研究したのは主にJavaフィードバック関数と観察者モードの実現であり、具体的な紹介と実現コードは以下の通りである。
観察者モード(時にはリリースモードと呼ばれる)-購読(Subscribe)モード、モデル-ビュー(View)モード、ソース-聴取者(Listener)モードまたはスレーブモード)は、ソフトウェア設計モードの一種である。このようなモードでは、目的物は、その観察者に依存するすべてのものを管理し、その自身の状態が変化したときに、自ら通知を出す。これは、一般に、観察者によって提供される方法を呼び出して実現される。このようなモードは、通常、イベント処理システムを実現するために用いられる。
いつ観察者モードを使いますか?
  • は、1つの抽象モデルが2つの側面を有している場合、一方は他方に依存している。これらの2つは、独立したオブジェクトにカプセル化され、それぞれが独立して変更および多重化できるようにする。
  • オブジェクトの変更には、他のオブジェクトを同時に変更する必要がありますが、具体的にどれぐらいのオブジェクトが変更されているか分かりません。
  • は、オブジェクトが他のオブジェクトに通知される必要がありますが、他のオブジェクトが誰であるかを仮定することはできません。つまり、これらのオブジェクトが緊密に結合されることを望まないです。
  • 実は観察者のモードは前に述べた橋、策略と共通の使用環境を持っています。変化を独立にカプセル化して、最大の再利用と結合を達成します。観察者と後者の違いは、観察者モードにおける目標と観察者の変化が独立ではなく、いくつかの関連があることにある。
    JavaではObservable類とObserverインターフェースにより観察者モードを実現した。一つのObserverオブジェクトは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();
    	}
    }
    出力結果:
    count Observers=2
    Concrete ObserverB udate
    Concrete ObserverA udate
    calback onCall
    締め括りをつける
    上記のコードから分かるように、フィードバック関数は観察者モードの1つに属し、目的はサイクル機構の代わりにコンポーネント間の結合性を低下させることである。観察者モードでは、ターゲットクラスはすべての観察者の引用を維持していますが、コールバックの中には引用だけが維持されています。
    以上がJavaフィードバック関数と観察者モードのインスタンスコードのすべての内容です。興味のある方は引き続き当駅の他のテーマを参照してください。友達のサポートに感謝します。