日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java设计模式--------观察者模式

發布時間:2023/12/16 java 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java设计模式--------观察者模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java設計模式--------觀察者模式:定義了一種一對多的依賴關系,讓多個觀察者對象同事監聽一個主題對象。這個主題對象發生變化時,會通知所有觀察者,使他們可以自動更新自己。

先看看下面的代碼結構圖,看的不怎么懂的小伙伴也沒什么關系。接下來會有代碼分析,看完代碼再次回來看這張圖思路就會清晰很多。



還是一樣,觀察者模式大概可以分成以下幾個類:

Subject:把所有觀察者的引用保存在一個聚集里,每個主題可以有任意數量的觀察者。抽象主題提供可以增加或者刪除觀察者的接口和通知觀察者的接口。

Observer:抽象觀察者,為所有觀察者定義接口,在得到主題對象的通知時及時更新自己。

ConcreteSubject:具體的觀察者類,實現抽象觀察者所要求的更新接口,以便使自身的狀態與主題對象的狀態相協調。

ConcreteObserver:具體的主題對象,當自身內部發生變化時給所有登記過的觀察者發送通知。


敲了一大堆的廢話,還是看代碼的實在。

代碼模擬的場景是:

員工在公司上班,老板不在時有的員工看NBA有的員工看小電影。。。。。。等。大家怕在娛樂的時候老板突然回來發現,就和前臺MM說好當老板回來的時候給大家發一個通知,大家就及時回到工作狀態。

就這樣,很簡單的。

上代碼:

Subject:

package com.tian.publish_subscribe;/*** @author 作者 : TianLuhua* @version 創建時間:2016年4月16日 下午11:03:16 通知者接口,為了與觀察者解耦而創建*/ abstract class Subject {// 通知者的actionprotected String acton;// 獲取actionprotected String getActon() {return acton;}// 注冊觀察者的方法abstract void Attach(Observer observer);// 去除觀察者的方法abstract void Detach(Observer observer);// 通知觀察者的方法abstract String Notify();}
Observer: package com.tian.publish_subscribe;/*** @author 作者 : TianLuhua* @version 創建時間:2016年4月16日 下午11:10:31 觀察者抽象類*/ public abstract class Observer {// 觀察者接到前臺mm的通知調用的方法public abstract void Update();}
QianTaiMM:(這里前臺MM就是具體主題類) package com.tian.publish_subscribe;import java.util.ArrayList; import java.util.List;/*** @author 作者 : TianLuhua* @version 創建時間:2016年4月16日 下午11:15:43 通知 者接口的實現者。* 我們模擬的場景是老板回來了前臺通知開小差的員工好好工作,這里的實現者就是公司的前臺mm。*/ public class QianTaiMM extends Subject {// 觀察者隊列private List<Observer> observers = new ArrayList<Observer>();// 通知者的actionprotected String acton;// 獲取actionprotected String getActon() {return acton;}public QianTaiMM(String acton) {this.acton = acton;}// 注冊觀察者public void Attach(Observer observer) {if (observers != null) {observers.add(observer);}}// 取消注冊public void Detach(Observer observer) {if (observers != null) {observers.remove(observer);}}// 通知觀察者public String Notify() {for (Observer observer : observers) {observer.Update();}return acton;}}

NBAObserver:(這里是看NBA的員工,具體的觀察者類) package com.tian.publish_subscribe;/*** @author 作者 : TianLuhua* @version 創建時間:2016年4月16日 下午11:35:54* */ public class NBAObserver extends Observer {private String name;private Subject subject;public NBAObserver(String name, Subject subject) {super();this.name = name;this.subject = subject;}@Overridepublic void Update() {System.out.println("前臺MM:" + subject.getActon());System.out.println(name + ":關閉球賽,認真工作。");}}
XiaoDianyingObserver:(這里是看xiaodianying的員工,具體的觀察者類) package com.tian.publish_subscribe;/*** @author 作者 : TianLuhua* @version 創建時間:2016年4月16日 下午11:56:38* */ public class XiaoDianyingObserver extends Observer {private String name;private Subject subject;public XiaoDianyingObserver(String name, Subject subject) {this.name = name;this.subject = subject;}@Overridepublic void Update() {System.out.println("前臺MM:" + subject.getActon());System.out.println(name + ":關閉小電影,認真工作。");}}

下面就是客服端調用的代碼了:

package com.tian.publish_subscribe;/*** @author 作者 : TianLuhua* @version 創建時間:2016年4月16日 下午11:58:22 客戶端*/ public class Main {public static void main(String[] args) {Subject qianTaiMM = new QianTaiMM("老板回來了");qianTaiMM.Attach(new NBAObserver("小李", qianTaiMM));qianTaiMM.Attach(new XiaoDianyingObserver("小趙", qianTaiMM));qianTaiMM.Notify();} }
打印輸出: 前臺MM:老板回來了 小李:關閉球賽,認真工作。 前臺MM:老板回來了 小趙:關閉小電影,認真工作。


怎么樣,很簡單吧。自己動手去實現一遍把,好記星不如爛筆頭啊。

Android中的接口回調機制,以及Button的點擊事件響應機制等內部就是用的觀察者模式。Button事件響應機制在注冊觀察者是在View類的?public void setOnClickListener(OnClickListener l)方法實現的,感興趣的小伙伴去看看吧。

休息了。

總結

以上是生活随笔為你收集整理的Java设计模式--------观察者模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。