欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java回調(diào)函數(shù)與觀察者模式實例代碼

 更新時間:2018年02月01日 14:41:55   作者:司馬懿字仲達  
這篇文章主要介紹了Java回調(diào)函數(shù)與觀察者模式實例代碼,簡單介紹了使用觀察者模式的場景,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下

本文研究的主要是Java回調(diào)函數(shù)與觀察者模式的實現(xiàn),具體介紹和實現(xiàn)代碼如下。

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

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

  1. 當一個抽象模型有兩個方面, 其中一個方面依賴于另一方面。將這二者封裝在獨立的對象中以使它們可以各自獨立地改變和復用。
  2. 當對一個對象的改變需要同時改變其它對象, 而不知道具體有多少對象有待改變。
  3. 當一個對象必須通知其它對象,而它又不能假定其它對象是誰。換言之, 你不希望這些對象是緊密耦合的。

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

在Java中通過Observable類和Observer接口實現(xiàn)了觀察者模式。一個Observer對象監(jiān)視著一個Observable對象的變化,當Observable對象發(fā)生變化時,Observer得到通知,就可以進行相應的工作。

package com.demo.test;
import java.util.Observable;
import java.util.Observer;
//觀察者模式里面目標類維護了所有觀察者的引用,而回調(diào)里面只是維護了一個引用
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方法只能在子類被調(diào)用
			setChanged();
			notifyObservers();
		}
	}
	// 回調(diào)函數(shù)接口
	interface ICallback {
		public void onCall();
	}
	// 回調(diào)類
	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();
		// 回調(diào)函數(shù)
		CallbackDemo callbackDemo = new CallbackDemo();
		callbackDemo.setListener(new ICallback() {
			@Override
			      public void onCall() {
				System.out.println("callback onCall");
			}
		}
		);
		callbackDemo.call();
	}
}

輸出結(jié)果:

countObservers = 2
ConcreteObserverB update
ConcreteObserverA update
callback onCall

總結(jié)

從上面代碼可以看出:回調(diào)函數(shù)應該屬于觀察者模式的一種,目的是為了替代輪循機制,將組件之間的耦合性降低。觀察者模式里面目標類維護了所有觀察者的引用,而回調(diào)里面只是維護了一個引用。

以上就是本文關(guān)于Java回調(diào)函數(shù)與觀察者模式實例代碼的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

相關(guān)文章

  • Springboot校驗工具類詳細代碼示例

    Springboot校驗工具類詳細代碼示例

    這篇文章主要給大家介紹了關(guān)于Springboot校驗工具類的相關(guān)資料,工具類里面主要是封裝了一些常用字段驗證方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-02-02
  • 求最大子數(shù)組之和的方法解析(2種可選)

    求最大子數(shù)組之和的方法解析(2種可選)

    本文主要對求最大子數(shù)組之和的方法進行詳細解析,列了兩種方法供大家選擇借鑒,需要的朋友一起來看下吧
    2016-12-12
  • 淺析SpringBoot2.4 靜態(tài)資源加載問題

    淺析SpringBoot2.4 靜態(tài)資源加載問題

    這篇文章主要介紹了SpringBoot2.4 靜態(tài)資源加載問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • springboot整合ehcache 實現(xiàn)支付超時限制的方法

    springboot整合ehcache 實現(xiàn)支付超時限制的方法

    在線支付系統(tǒng)需要極高的穩(wěn)定性,在有限的系統(tǒng)資源下,穩(wěn)定性優(yōu)先級要高于系統(tǒng)并發(fā)以及用戶體驗,因此需要合理的控制用戶的支付請求。下面通過本文給大家介紹springboot整合ehcache 實現(xiàn)支付超時限制的方法,一起看看吧
    2018-01-01
  • mybatis-plus自動填充插入更新時間有8小時時差

    mybatis-plus自動填充插入更新時間有8小時時差

    本文主要介紹了mybatis-plus自動填充插入更新時間有8小時時差,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Java中如何避免sql注入實例詳解

    Java中如何避免sql注入實例詳解

    SQL注入是最常見的攻擊方式之一,它不是利用操作系統(tǒng)或其它系統(tǒng)的漏洞來實現(xiàn)攻擊的,而是程序員因為沒有做好判斷,被不法用戶鉆了SQL的空子,下面這篇文章主要給大家介紹了關(guān)于Java中如何避免sql注入的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • java 反射 動態(tài)調(diào)用不同類的靜態(tài)方法(推薦)

    java 反射 動態(tài)調(diào)用不同類的靜態(tài)方法(推薦)

    下面小編就為大家?guī)硪黄狫AVA 反射 動態(tài)調(diào)用不同類的靜態(tài)方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • Java阻塞隊列中的BlockingQueue接口詳解

    Java阻塞隊列中的BlockingQueue接口詳解

    這篇文章主要介紹了Java阻塞隊列中的BlockingQueue接口詳解,對于Queue而言,BlockingQueue是主要的線程安全的版本,具有阻塞功能,可以允許添加、刪除元素被阻塞,直到成功為止,BlockingQueue相對于Queue而言增加了兩個方法put、take元素,需要的朋友可以參考下
    2023-09-09
  • 解決springboot項目打成jar包后運行時碰到的小坑

    解決springboot項目打成jar包后運行時碰到的小坑

    這篇文章主要介紹了解決springboot項目打成jar包后運行時碰到的小坑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Springboot的spring-boot-maven-plugin導入失敗的解決方案

    Springboot的spring-boot-maven-plugin導入失敗的解決方案

    這篇文章主要介紹了Springboot的spring-boot-maven-plugin導入失敗的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07

最新評論