1. 程式人生 > >java中的監聽機制——觀察者設計模式詳解

java中的監聽機制——觀察者設計模式詳解

好久沒有做筆記了,我發現研究過一個東西后忘的很快,等下次遇到後還得重新查資料學,倒不如寫篇筆記記錄一下下次遇到相同的問題後查查筆記瞬間就知道了,從而節省了好多時間,今天心血來潮哈哈,寫一篇簡單的筆記找找感覺重拾鬥志,以下內容純屬個人理解,如有錯誤歡迎大家批評指正,,哈哈。。。廢話不多說進入正題,

一、監聽機制介紹

           在android的開發中我們經常會遇到,一個類A去監聽一個類B成員的變化從而在類A去去進行回撥來達到更新的效果,這就是一種簡單的監聽機制。

  監聽機制的處理流程圖如下:



二、監聽機制例項詳解

若想搞清楚監聽機制我們必須弄清楚以下5個概念:

 1事件源,被監聽物件。

 2監聽器:用於監聽1

 3繫結:是2去監聽1

 4 事件:在1進行相應的操作

 5 事件物件:在4中,通過5可以獲得1

可能理解起來比較繞下面我們通過一個簡單的例子來進行詳細的介紹

首先看下目錄結構



目錄介紹:


上面的目錄中我們是想在TestSon這個類中去監聽Son的動作

/**
 * 每一個孩子都應該有一個匹配的SonListener,每一個監聽的事件都應該有與之匹配的事件物件
 * @author Shimmer
 *
 */
public class Son {
	
	ISonListener sonListener;//緩衝監聽的引用
	
	private String name;
	
	public void setName(String name) {
		this.name = name;
	}
	
	public String getName() {
		return name;
	}
	
	//son 的吃飯方法
     public void eat(){
    	 System.out.println("我在吃飯中。。。");
    	 if(sonListener!=null){
              sonListener.eatting(new MySonEvent(this));//這裡的this是指當前的物件就是當前的Son
    		 				        //傳過去之後會返回當前的Son即我們監聽的是當前的孩子
    	 }
     }
     //son的睡覺方法
     public void sleep(){
    	 System.out.println("我在睡覺中。。。");
    	 if(sonListener!=null){
    		 sonListener.sleeping(new MySonEvent(this));
    	 }
     }
     
     public void setSonListener(ISonListener sonListener){
    	 this.sonListener=sonListener;
     }
}

//實現監聽物件獲得事件源
 class MySonEvent implements ISonEvent{

	 private Son son;
	 public MySonEvent(Son son) {
		 this.son=son;
	}
	@Override
	public Son getSon() {
		return this.son;
	}
	 
 }

監聽孩子的類

TestSon

package com.tsingda.listener;

//在這個類中對孩子的動作進行監聽
public class TestSon {
	/**
	 * 1事件源,被監聽物件。 
	 * 2監聽器:用於監聽1 
	 * 3繫結:是2去監聽1 
	 * 4 事件:在1進行相應的操作 
	 * 5 事件物件:在4中,通過5可以獲得1
	 */

	public static void main(String args[]) {
		// 1 獲得監聽物件 son
		Son son = new Son();

		son.setName("小明");
		// 3 繫結(註冊監聽器)
		son.setSonListener(new MySonListener());
		
		// 4 事件 
		son.eat();
		son.sleep();
	}
}

// 2 監聽器 用於監聽son這個物件
class MySonListener implements ISonListener {

	@Override
	public void eatting(ISonEvent son) {
		//5 通過事件物件獲得事件源
		String name=son.getSon().getName();
		System.out.println("監聽孩子吃飯"+name);
	}

	@Override
	public void sleeping(ISonEvent son) {
		String name=son.getSon().getName();
		System.out.println("監聽孩子睡覺"+name);
	}

}


兩個介面的程式碼如下
package com.tsingda.listener;

public interface ISonEvent {
	public Son getSon();
}
package com.tsingda.listener;

public interface ISonListener {
	
	public void eatting(ISonEvent son);//監聽孩子吃飯的方法
	public void sleeping(ISonEvent son);//監聽孩子睡覺的方法
}

列印的結果:


雖然比較簡單但是總覺著自己理解的不夠透徹,學東西就要學的透徹點。晚上一點多了睡覺睡覺,這就是奮鬥的程式設計師的生活,哈哈。。。

若果有哪個地方寫的不對,歡迎大家批評指正謝謝

原始碼地址



相關推薦

java機制——觀察設計模式

好久沒有做筆記了,我發現研究過一個東西后忘的很快,等下次遇到後還得重新查資料學,倒不如寫篇筆記記錄一下下次遇到相同的問題後查查筆記瞬間就知道了,從而節省了好多時間,今天心血來潮哈哈,寫一篇簡單的筆記

觀察設計模式

1. 觀察者模式的介紹 觀察者模式定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某一個主題物件。這個主題物件在狀態上發生變化時,會通知所有觀察者物件,使它們能夠自動更新自己。 例如:我們在使用應用市場下載應用時,我們的通知欄會有下載進度顯示,我們的詳情頁會有進度

Java事件機制觀察設計模式

idea demo1 script 操作 alt face ner over 方法 一. Java事件監聽機制 1. 事件監聽三要素: 事件源,事件對象,事件監聽器 2. 三要素之間的關系:事件源註冊事件監聽器後,當事件源上發生某個動作時,事件源就會調用事件監聽的一個方法,

java事件機制觀察設計模式的實際運用)

package cn.yang.test.controller; /**java的事件監聽機制和觀察者設計模式 * Created by Dev_yang on 2016/3/1. */ publ

java設計模式java觀察設計模式

今天給大家分享一下觀察者設計模式(監聽設計模式),該模式在很多主流得框架、原始碼中使用率非常高。在分享之前先給大家講一個我們使用手機的一個場景,我們都用過手機,當我們手機來電話的時候,會有各種複雜的操作,比如會響鈴、手機震動、螢幕會亮屏等等,大家有沒有考慮過這個場景是怎麼實現的呢?其實這個地方就是使

設計模式(七):Java觀察設計模式

介紹 觀察者模式是行為設計模式之一。當您對物件的狀態感興趣並希望在有任何更改時收到通知時,觀察者設計模式非常有用。在觀察者模式中,監視另一個物件狀態的物件稱為Observer,正在被監視的物件稱為Subject。 根據GoF,觀察者設計模式的意圖是; 定義物件之間的一對多依賴關係,以便當一個物件更改狀態時

java事件機制,spring的event listener模式和解耦

event,listener是observer模式一種體現,在spring 3.0.5中,已經可以使用annotation實現event和eventListner裡。我們以spring-webflow裡的hotel booking為例,看一下實現,步驟如下:1,建立eve

淺談java內置的觀察模式與動態代理的實現

所有 代理 notify play ani effect 一個 indicate protected 一.關於觀察者模式 1.將觀察者與被觀察者分離開來,當被觀察者發生變化時,將通知所有觀察者,觀察者會根據這些變化做出對應的處理。 2.jdk裏已經提供對應的Observer

自定義JAVA事件機制

JAVA中的事件機制的參與者有3種角色:Event、EventSource、Listener 1.Event:就是事件產生時具體的“事件”,用於Listener的相應的方法之中,作為引數一般存在於Listener的方法之中。 2.EventSource:事件源,它的作用主要是對事件和監聽進行

java觀察設計模式

觀察者模式在軟體程式設計中用的較多,我不善於表達我就用在網上看到的故事,和生活的例子說下基本思想 故事:    小雪是一個非常漂亮的女孩,漂亮的女孩總是有很多的追求者,而且追求者的隊伍在不斷的變動,隨時有人進入這個隊伍,也有人退出。男孩們追求女孩時總是表現出120%的關心,

觀察設計模式

實現 per 合並 一個 num ride blog 通知 elf 1.觀察者接口及實現類 //一個Observer接口: 1.public interface Observer { 2. public void update(); 3.} //兩個實

設計模式: 自己手動實現一個觀察設計模式

package rgs name gree 觀察者設計模式 forecast server 它的 upd 觀察者模式: 定義了對象之間的一對多依賴,這樣一來。當一個對象(被觀察者)改變狀態時,它的全部依賴者(觀察者)都會收到通知並自己主動更新。 在觀察者模式中,會

C# 通過 Observer觀察 設計模式 來理解 抽象類 和 介面 應用在什麼地方

什麼時候用抽象類?什麼時候用介面?怎麼理解抽象類?怎麼理解介面? 一、百度解釋抽象類和介面的區別 總而言之就是一句話:抽象類可以包含具體實現,介面只能包含定義。 實現介面時必須實現介面定義的方法等,抽象類中如果給方法加上了“abstract”,那麼這個方法也需要在繼承後實現這個

設計模式觀察設計模式

原文首發於微信公眾號:jzman-blog,歡迎關注交流! 最近補一下設計模式相關的知識,關於觀察者設計模式主要從以下幾個方面來學習,具體如下: 什麼是觀察者設計模式 關鍵概念理解 通知觀察者的方式 觀察者模式的實現 觀察者模式的優缺

JAVA設計模式(三)----------裝飾模式

今天LZ帶給大家的是裝飾者模式,提起這個設計模式,LZ心裡一陣激動,這是LZ學習JAVA以來接觸的第一個設計模式,也許也是各位接觸的第一個設計模式。記得當初老師在講IO的時候就提到過它:“是你還有你,一切拜託你。”沒錯,這就是裝飾者模式最簡潔的定義了。下面LZ引出標準的定義(

Java開發的23種設計模式(轉)

資源:http://download.csdn.net/detail/zhangerqing/4835830 原文連結:http://blog.csdn.net/zhangerqing 設計模式(Design Patterns)                   

Java開發的23種設計模式

一、設計模式的分類 總體來說設計模式分為三大類: 建立型模式,共五種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。 結構型模式,共七種:介面卡模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。 行為型模式,共十一種:策

Observer模式觀察設計模式

Observer 設計模式? 在Observer模式中,當觀察物件的狀態發生變化時,會通知給觀察者。Observer模式適用於根據物件狀態進行相應處理的場景。 Observer 並非主動觀察,而是被動觀察,實際可以又稱之為釋出-訂閱者模式 MVC Model、View、Controller,並且Model裡

觀察設計模式:索拉卡的R技能

觀察者模式:在物件之間定義一對多的依賴,這樣以來,當一個物件改變狀態,依賴它的物件都會收到通知,並自動更新。 設計原則: 為互動物件之間的鬆耦合設計而努力 舉例說明 場景:LOL中有一個英雄名字叫

設計模式(四)——觀察設計模式

今天在做Oozie的專案的時候,想要對後臺的作業任務進行實時監控,想了好久都沒有辦法,因為沒有原始碼,只有介面,所以最終沒有搞成,用了自我感覺比較噁心的定時請求的方法....額,說了這麼多好像和主題沒什麼關係,那好吧,進入正題。我們很多時候都希望有一個類或者什麼可以發現某個