一、java內建的觀察者模式

來源:互聯網
上載者:User

標籤:set   http   out   繼承   lang   參數   bsp   add   doc   

Observer對象是觀察者,Observable對象是被觀察者。

官網api文檔:http://docs.oracle.com/javase/7/docs/api/

1. 實現觀察者模式實現觀察者模式非常簡單,[1]建立被觀察者類,它繼承自java.util.Observable類;[2]建立觀察者類,它實現java.util.Observer介面; 
  • 對於被觀察者類:
添加它的觀察者:void addObserver(Observer o)addObserver()方法把觀察者對象添加到觀察者對象列表中

當被觀察者中的事件發生變化時,執行setChanged();notifyObservers();setChange()方法用來設定一個內部標誌位註明資料發生了變化;notifyObservers()方法會去調用觀察者對象列表中所有的Observer的update()方法,通知它們資料發生了變化。只有在setChange()被調用後,notifyObservers()才會去調用update()。 
  • 對於觀察者類,實現Observer介面的唯一方法update

void update(Observable o, Object arg)

形參Object arg,對應一個由notifyObservers(Object arg);傳遞來的參數,當執行的是notifyObservers();時,arg為null。

 

  • 執行個體:

被觀察者:ServerManager

package com.test.observer;import java.util.Observable;public class ServerManager extends Observable {     private int data = 0;         public int getData(){         return data;    }        public void setData(int i){          if(this.data != i){ this.data = i;setChanged();}           notifyObservers();  //只有在setChange()被調用後,notifyObservers()才會去調用update(),否則什麼都不幹。  } }     }}

 

觀察者一:AObserver

import java.util.Observable;import java.util.Observer;public class AObserver implements Observer {        public AObserver(ServerManager sm) {        super();        // TODO Auto-generated constructor stub        sm.addObserver(this);  //註冊加入觀察者    }    @Override    public void update(Observable arg0, Object arg1) {        System.out.println("AObserver receive:Data has changed to "+((ServerManager) arg0).getData());    }}

 

 觀察者二:BObserver

import java.util.Observable;import java.util.Observer;public class BObserver implements Observer {        public BObserver(ServerManager sm) {        super();        sm.addObserver(this);  //註冊加入觀察者    }    @Override    public void update(Observable o, Object arg) {        // TODO Auto-generated method stub        System.out.println("BObserver receive:Data has changed to "+((ServerManager) o).getData());    }}

 測試:

public class TestDemo {    public static void main(String[] args) {        // TODO Auto-generated method stub        ServerManager sm = new ServerManager();        AObserver a    = new AObserver(sm);        BObserver b = new BObserver(sm);        sm.setData(5);        sm.deleteObserver(a);  //登出觀察者,以後被觀察者有資料變化就不再通知這個已登出的觀察者        sm.setData(10);    }}

運行結果:

 

一、java內建的觀察者模式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.