溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java如何實現回調函數與觀察者模式

發(fā)布時間:2021-07-21 14:07:14 來源:億速云 閱讀:163 作者:小新 欄目:編程語言

小編給大家分享一下Java如何實現回調函數與觀察者模式,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

具體介紹和實現代碼如下。

觀察者模式(有時又被稱為發(fā)布(publish )-訂閱(Subscribe)模式、模型-視圖(View)模式、源-收聽者(Listener)模式或從屬者模式)是軟件設計模式的一種。在此種模式中,一個目標物件管理所有相依于它的觀察者物件,并且在它本身的狀態(tài)改變時主動發(fā)出通知。這通常透過呼叫各觀察者所提供的方法來實現。此種模式通常被用來實現事件處理系統。

什么時候使用觀察者模式:

  1. 當一個抽象模型有兩個方面, 其中一個方面依賴于另一方面。將這二者封裝在獨立的對象中以使它們可以各自獨立地改變和復用。

  2. 當對一個對象的改變需要同時改變其它對象, 而不知道具體有多少對象有待改變。

  3. 當一個對象必須通知其它對象,而它又不能假定其它對象是誰。換言之, 你不希望這些對象是緊密耦合的。

其實觀察者模式同前面講過的橋梁、策略有著共同的使用環(huán)境:將變化獨立封裝起來,以達到最大的重用和解耦。觀察者與后兩者不同的地方在于,觀察者模式中的目標和觀察者的變化不是獨立的,而是有著某些聯系。

在Java中通過Observable類和Observer接口實現了觀察者模式。一個Observer對象監(jiān)視著一個Observable對象的變化,當Observable對象發(fā)生變化時,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

以上是“Java如何實現回調函數與觀察者模式”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI