Android開發(fā)實(shí)現(xiàn)簡(jiǎn)單的觀察者與被觀察者示例
本文實(shí)例講述了Android開發(fā)實(shí)現(xiàn)簡(jiǎn)單的觀察者與被觀察者。分享給大家供大家參考,具體如下:
概述:
觀察者模式(又被稱為發(fā)布-訂閱(Publish/Subscribe)模式,屬于行為型模式的一種,它定義了一種一對(duì)多的依賴關(guān)系,讓多個(gè)觀察者對(duì)象同時(shí)監(jiān)聽某一個(gè)主題對(duì)象。這個(gè)主題對(duì)象在狀態(tài)變化時(shí),會(huì)通知所有的觀察者對(duì)象,使他們能夠自動(dòng)更新自己。
觀察者模式結(jié)構(gòu)圖
Subject:抽象主題(抽象被觀察者),抽象主題角色把所有觀察者對(duì)象保存在一個(gè)集合里,每個(gè)主題都可以有任意數(shù)量的觀察者,抽象主題提供一個(gè)接口,可以增加和刪除觀察者對(duì)象。
ConcreteSubject:具體主題(具體被觀察者),該角色將有關(guān)狀態(tài)存入具體觀察者對(duì)象,在具體主題的內(nèi)部狀態(tài)發(fā)生改變時(shí),給所有注冊(cè)過的觀察者發(fā)送通知。
Observer:抽象觀察者,是觀察者者的抽象類,它定義了一個(gè)更新接口,使得在得到主題更改通知時(shí)更新自己。
ConcrereObserver:具體觀察者,是實(shí)現(xiàn)抽象觀察者定義的更新接口,以便在得到主題更改通知時(shí)更新自身的狀態(tài)。
實(shí)現(xiàn)方法
1、創(chuàng)建接口觀察者(Watcher.java):
package watch; public interface Watcher { void update(String str); }
2、創(chuàng)建接口被觀察者(Watched.java):
package watch; public interface Watched { void adWatcherh(Watcher watcher); void removeWatcherh(Watcher watcher); void notifyAll(String str); }
3、創(chuàng)建觀察者實(shí)現(xiàn)接口(ConWatcher.java):
package watch; public class ConWatcher implements Watcher { @Override public void update(String str) { System.out.println(str); } }
4、創(chuàng)建被觀察者實(shí)現(xiàn)接口(ConWatched.java):
package watch; import java.util.ArrayList; import java.util.List; public class ConWatched implements Watched { List<Watcher> list = new ArrayList<Watcher>(); @Override public void adWatcherh(Watcher watcher) { list.add(watcher); } @Override public void removeWatcherh(Watcher watcher) { list.remove(watcher); } @Override public void notifyAll(String str) { for (Watcher watcher : list){ watcher.update(str); } } }
5、測(cè)試(WatchTest.java):
package watch; public class WatchTest { public static void main(String[] args) throws Exception{ ConWatched conWatched = new ConWatched(); ConWatcher conWatcher1 = new ConWatcher(); ConWatcher conWatcher2 = new ConWatcher(); ConWatcher conWatcher3 = new ConWatcher(); System.out.println("腳本之家測(cè)試結(jié)果:"); conWatched.adWatcherh(conWatcher1); conWatched.adWatcherh(conWatcher2); conWatched.adWatcherh(conWatcher3); conWatched.notifyAll("I am coming"); } }
文件目錄結(jié)構(gòu):
運(yùn)行結(jié)果:
更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android開發(fā)入門與進(jìn)階教程》、《Android調(diào)試技巧與常見問題解決方法匯總》、《Android基本組件用法總結(jié)》、《Android視圖View技巧總結(jié)》、《Android布局layout技巧總結(jié)》及《Android控件用法總結(jié)》
希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。
- Android回調(diào)與觀察者模式的實(shí)現(xiàn)原理
- Android觀察者模式實(shí)例分析
- android開發(fā)中使用java觀察者模式
- Android源碼學(xué)習(xí)之觀察者模式應(yīng)用及優(yōu)點(diǎn)介紹
- Android源碼學(xué)習(xí)之單例模式應(yīng)用及優(yōu)點(diǎn)介紹
- android基礎(chǔ)教程之夜間模式實(shí)現(xiàn)示例
- Android 聽筒模式的具體實(shí)現(xiàn)實(shí)例
- android設(shè)計(jì)模式之單例模式詳解
- Android源碼學(xué)習(xí)之工廠方法模式應(yīng)用及優(yōu)勢(shì)介紹
相關(guān)文章
Android 進(jìn)度條自動(dòng)前進(jìn)效果的實(shí)現(xiàn)代碼
這篇文章主要介紹了Android 進(jìn)度條自動(dòng)前進(jìn)效果,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07Android實(shí)現(xiàn)自定義加載框的代碼示例
本篇文章主要介紹了Android實(shí)現(xiàn)自定義加載框的代碼示例,App在與服務(wù)器進(jìn)行網(wǎng)絡(luò)交互的時(shí)候,有個(gè)提示加載框,有興趣的可以了解一下。2017-02-02Android客戶端實(shí)現(xiàn)注冊(cè)、登錄詳解(2)
這篇文章主要為大家詳細(xì)介紹了Android客戶端實(shí)現(xiàn)注冊(cè)、登錄代碼第二篇,App與服務(wù)器的交互實(shí)現(xiàn)登錄和自動(dòng)登錄功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11Android canvas畫圖操作之切割畫布實(shí)現(xiàn)方法(clipRect)
這篇文章主要介紹了Android canvas畫圖操作之切割畫布實(shí)現(xiàn)方法,通過clipRect方法實(shí)現(xiàn)canvas畫布的切割操作,需要的朋友可以參考下2016-10-10Flutter實(shí)現(xiàn)倒計(jì)時(shí)秒數(shù)轉(zhuǎn)時(shí)分秒然后倒計(jì)時(shí)功能
有一個(gè)需求,需要在頁(yè)面進(jìn)行顯示倒計(jì)時(shí),倒計(jì)時(shí)結(jié)束后,做相應(yīng)的邏輯處理,這篇文章主要介紹了Flutter實(shí)現(xiàn)倒計(jì)時(shí)功能,秒數(shù)轉(zhuǎn)時(shí)分秒,然后倒計(jì)時(shí),需要的朋友可以參考下2023-08-08Android 啟動(dòng)第三方程序的方法總結(jié)
這篇文章主要介紹了Android 啟動(dòng)第三方程序的方法總結(jié)的相關(guān)資料,需要的朋友可以參考下2017-04-04