1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      Java如何實(shí)現(xiàn)回調(diào)函數(shù)與觀察者模式

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

      創(chuàng)新互聯(lián)從2013年成立,先為潁東等服務(wù)建站,潁東等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為潁東企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

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

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

      什么時(shí)候使用觀察者模式:

      1. 當(dāng)一個(gè)抽象模型有兩個(gè)方面, 其中一個(gè)方面依賴于另一方面。將這二者封裝在獨(dú)立的對(duì)象中以使它們可以各自獨(dú)立地改變和復(fù)用。

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

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

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

      在Java中通過Observable類和Observer接口實(shí)現(xià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;
      //觀察者模式里面目標(biāo)類維護(hù)了所有觀察者的引用,而回調(diào)里面只是維護(hù)了一個(gè)引用
      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");
      		}
      	}
      	// 被觀察對(duì)象
      	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

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


      本文名稱:Java如何實(shí)現(xiàn)回調(diào)函數(shù)與觀察者模式
      文章網(wǎng)址:http://www.ef60e0e.cn/article/jhgjje.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        上饶市| 马公市| 普兰县| 炉霍县| 郑州市| 敦煌市| 安宁市| 辛集市| 敦煌市| 乾安县| 南昌市| 安达市| 嘉禾县| 巧家县| 宣恩县| 宁武县| 楚雄市| 仙游县| 克什克腾旗| 梁山县| 阜城县| 洛阳市| 汤原县| 丰顺县| 麻阳| 赫章县| 乌兰浩特市| 全椒县| 门头沟区| 阳原县| 汨罗市| 响水县| 嵩明县| 石家庄市| 富锦市| 房产| 湾仔区| 精河县| 璧山县| 龙江县| 铁岭市|