觀察者模式 (Observer)

來源:互聯網
上載者:User

-- Start

觀察者模式又被稱為發布-訂閱<Publish/Subscribe>模式, 它通常應用在使用者介面中, 一個典型的例子是當業務對象發生變化時, 通知使用者介面, 從而即時重新整理資料, 此時使用者介面是觀察者, 業務資料是被觀察者. Java 通過 Observer(觀察者) 和 Observable(被觀察者) 為我們實現了一個觀察者模式的架構, 下面是一個簡單的例子.

import java.util.Observable;import java.util.Observer;public class Test {public static void main(String[] args) throws Exception {WeatherData wd = new WeatherData();wd.addObserver(new WeatherGUI());// 測試for (int i = 0; i < 10; i++) {wd.setTemperature(i);}}}// 天氣對象 (被觀察者)class WeatherData extends Observable {public static String TEMPERATURE = "temperature";private Integer temperature; // 溫度public Integer getTemperature() {return temperature;}public void setTemperature(Integer newTemperature) {Integer oldTemperature = temperature;temperature = newTemperature;if (oldTemperature != null && newTemperature != null && oldTemperature != newTemperature) {setChanged(); // 設定變化標誌位notifyObservers(TEMPERATURE); // 通知觀察者}}}// 天氣GUI(觀察者)class WeatherGUI implements Observer {public void update(Observable o, Object arg) {WeatherData wd = (WeatherData) o;if (WeatherData.TEMPERATURE.equals(arg)) {displayTemperature(wd.getTemperature()); // 得到通知後重新整理溫度}}// 顯示溫度private void displayTemperature(Integer temperature) {System.out.println(temperature);}}

-- 更多參見:Java 精萃
-- 聲 明:轉載請註明出處
-- Last Updated on 2012-09-13
-- Written by ShangBo on 2012-09-13
-- End

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.