真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java如何實(shí)現(xiàn)回調(diào)函數(shù)與觀(guān)察者模式-創(chuàng)新互聯(lián)

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

成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì),成都做網(wǎng)站公司-創(chuàng)新互聯(lián)已向千余家企業(yè)提供了,網(wǎng)站設(shè)計(jì),網(wǎng)站制作,網(wǎng)絡(luò)營(yíng)銷(xiāo)等服務(wù)!設(shè)計(jì)與技術(shù)結(jié)合,多年網(wǎng)站推廣經(jīng)驗(yàn),合理的價(jià)格為您打造企業(yè)品質(zhì)網(wǎng)站。

具體介紹和實(shí)現(xiàn)代碼如下。

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

什么時(shí)候使用觀(guān)察者模式:
  1. 當(dāng)一個(gè)抽象模型有兩個(gè)方面, 其中一個(gè)方面依賴(lài)于另一方面。將這二者封裝在獨(dú)立的對(duì)象中以使它們可以各自獨(dú)立地改變和復(fù)用。

  2. 當(dāng)對(duì)一個(gè)對(duì)象的改變需要同時(shí)改變其它對(duì)象, 而不知道具體有多少對(duì)象有待改變。

  3. 當(dāng)一個(gè)對(duì)象必須通知其它對(duì)象,而它又不能假定其它對(duì)象是誰(shuí)。換言之, 你不希望這些對(duì)象是緊密耦合的。

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

在Java中通過(guò)Observable類(lèi)和Observer接口實(shí)現(xiàn)了觀(guān)察者模式。一個(gè)Observer對(duì)象監(jiān)視著一個(gè)Observable對(duì)象的變化,當(dāng)Observable對(duì)象發(fā)生變化時(shí),Observer得到通知,就可以進(jìn)行相應(yīng)的工作。

package com.demo.test;
import java.util.Observable;
import java.util.Observer;
//觀(guān)察者模式里面目標(biāo)類(lèi)維護(hù)了所有觀(guān)察者的引用,而回調(diào)里面只是維護(hù)了一個(gè)引用
public class ObserverCallbackDemo {
	// 觀(guān)察者A
	static class ConcreteObserverA implements Observer {
		@Override
		    public void update(Observable o, Object arg) {
			System.out.println("ConcreteObserverA update");
		}
	}
	// 觀(guān)察者B
	static class ConcreteObserverB implements Observer {
		@Override
		    public void update(Observable o, Object arg) {
			System.out.println("ConcreteObserverB update");
		}
	}
	// 被觀(guān)察對(duì)象
	static class ConcreteObservable extends Observable {
		public void changeValue() {
			//protected方法只能在子類(lèi)被調(diào)用
			setChanged();
			notifyObservers();
		}
	}
	// 回調(diào)函數(shù)接口
	interface ICallback {
		public void onCall();
	}
	// 回調(diào)類(lèi)
	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) {
		// 觀(guān)察者
		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

以上是“Java如何實(shí)現(xiàn)回調(diào)函數(shù)與觀(guān)察者模式”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


分享名稱(chēng):Java如何實(shí)現(xiàn)回調(diào)函數(shù)與觀(guān)察者模式-創(chuàng)新互聯(lián)
新聞來(lái)源:http://weahome.cn/article/djsses.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部