日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java設計模式之觀察者模式原理與用法詳解

瀏覽:137日期:2022-08-31 17:11:40

本文實例講述了Java設計模式之觀察者模式原理與用法。分享給大家供大家參考,具體如下:

什么是觀察者模式

可以這么理解:

觀察者模式定義了一種一對多的依賴關系,讓多個觀察者對象同時監聽某一個主題對象。

這個主題對象在狀態上發生變化時,會通知所有觀察者對象,讓它們能夠自動更新自己。

也可以這樣理解:

觀察者模式是關于多個對象想知道一個對象中數據變化情況的一種成熟模式。觀察者模式中有一個稱作“主題”的對象和若干個稱作“觀察者”的對象,“主題”和“觀察者”之間是一種一對多的依賴關系。

當“主題”的狀態發生變化時,所有“觀察者”都得到通知。

日常生活中,最容易理解的例子就是微信公眾號。我們用微信訂閱的微信公共號就是這里所說的主題,而我們 每一個關注這個微信號的人就是這里的觀察者。公眾號每天有更新,所有訂閱者都會收到。

觀察者模式類圖:

Java設計模式之觀察者模式原理與用法詳解

應用場景

一般被用來實現事件處理系統。

觀察者模式組成

從定義看,可以分成兩個角色, 觀察者和被觀察對象(即主題)

從類圖看,代碼實現有四個角色:

抽象主題角色: 把所有對觀察者對象的引用保存在一個集合中,每個抽象主題角色都可以有任意數量的觀察者。抽象主題提供一個接口,可以增加和刪除觀察者角色。一般用一個抽象類和接口來實現。

抽象觀察者角色:為所有具體的觀察者定義一個接口,在得到主題的通知時更新自己。

具體主題角色:在具體主題內部狀態改變時,給所有登記過的觀察者發出通知。具體主題角色通常用一個子類實現。

具體觀察者角色:該角色實現抽象觀察者角色所要求的更新接口,以便使本身的狀態與主題的狀態相協調。通常用一個子類實現。如果需要,具體觀察者角色可以保存一個指向具體主題角色的引用。

代碼實現觀察者模式 抽象主題角色

主題接口規定了具體主題需要實現的添加,刪除及通知觀察者更新數據的方法

/** * 抽象主題,被觀察者 * */public interface Subject { /** * 添加觀察者 * * @param observer */ void addObserver(Observer observer); /** * 移除指定的觀察者 * * @param observer */ void removeObserver(Observer observer); /** * 移除所有的觀察者 */ void removeAll(); /** * data 是要通知給觀察者的數據 因為Object是所有類的父類,可以使用多態,當然 你也可以使用 泛型 * * @param data */ void notifyAllObserver(Object data); /** * 單獨 通知某一個觀察者 * * @param observer * @param data * data 是要通知給觀察者的數據 因為Object是所有類的父類,可以使用多態,當然 你也可以使用 泛型 */ void notify(Observer observer, Object data); } 抽象觀察者角色

觀察者接口規定了具體觀察者用來更新數據的方法

/** * 抽象觀察者接口 */public interface Observer { /** * * @param subject 被觀察者 * @param data 被觀察者傳遞給觀察者的 數據 */ void update(Subject subject,Object data);} 具體主題角色

public class ConcreteSubject implements Subject { //觀察者集合,用于管理所有的觀察者 List<Observer> mList = new ArrayList<>(); @Override public void addObserver(Observer observer) { // TODO Auto-generated method stub // 確保相同的觀察者只含有一個 if (observer == null) { throw new NullPointerException('observer == null'); } if (!mList.contains(observer)) { mList.add(observer); } } @Override public void removeObserver(Observer observer) { // TODO Auto-generated method stub mList.remove(observer); } @Override public void removeAll() { // TODO Auto-generated method stub mList.clear(); } @Override public void notifyAllObserver(Object data) { // TODO Auto-generated method stub for (Observer observer : mList) { observer.update(this, data); } } @Override public void notify(Observer observer, Object data) { // TODO Auto-generated method stub if (observer != null) { observer.update(this, data); } } } 具體的觀察者角色

這里我們可以定義多個具體的觀察者角色

觀察者One

public class ObserverOne implements Observer { @Override public void update(Subject subject, Object data) { // TODO Auto-generated method stub System.err .println('the messge from subject to-->' + this.getClass().getName() + '<---is ' + data.toString()); } }

觀察者Two

public class ObserverTwo implements Observer { @Override public void update(Subject subject, Object data) { // TODO Auto-generated method stub System.err .println('the messge from subject to-->' + this.getClass().getName() + '<---is ' + data.toString()); } }

觀察者Three

public class ObserverThree implements Observer { @Override public void update(Subject subject, Object data) { // TODO Auto-generated method stub System.err .println('the messge from subject to-->' + this.getClass().getName() + '<---is ' + data.toString()); } } 測試類

public class TestObservePattern { public static void main(String[] args) { // TODO Auto-generated method stub ConcreteSubject concreteSubject = new ConcreteSubject(); ObserverOne observerOne=new ObserverOne(); ObserverTwo observerTwo=new ObserverTwo(); ObserverThree observerThree=new ObserverThree(); concreteSubject.addObserver(observerOne); concreteSubject.addObserver(observerTwo); concreteSubject.addObserver(observerThree); //通知所有的觀察者 concreteSubject.notifyAllObserver('wake up,wake up'); //通知某個特定的觀察者OberverTwo concreteSubject.notify(observerTwo, 'Specila msg for you'); //觀察者ObserveThree 決定不再訂閱主題 concreteSubject.removeObserver(observerThree); //通知所有的觀察者 concreteSubject.notifyAllObserver('new Message come '); } }

更多java相關內容感興趣的讀者可查看本站專題:《Java面向對象程序設計入門與進階教程》、《Java數據結構與算法教程》、《Java操作DOM節點技巧總結》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》

希望本文所述對大家java程序設計有所幫助。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产欧美日韩一区二区三区四区 | 九九九精品视频| 日韩精品成人在线观看| 在线看片日韩| 日本a口亚洲| 911精品国产| 麻豆精品视频在线观看免费| 欧美一级久久| 国产精品手机在线播放| 麻豆国产91在线播放| 久久精品国产成人一区二区三区| 精品久久久网| 亚洲va中文在线播放免费| 激情欧美丁香| 爽好久久久欧美精品| 亚欧成人精品| 国产精品一站二站| 91亚洲国产高清| 久久中文亚洲字幕| 蜜桃免费网站一区二区三区| 日韩激情综合| 久久一区国产| 亚洲黄色中文字幕| 欧美成人日韩| 亚洲三级在线| 麻豆久久久久久| 久久久久久久久久久9不雅视频| 亚洲经典在线| 日韩高清在线不卡| 精品视频一区二区三区四区五区| 日韩三区在线| 视频一区二区中文字幕| 国产探花一区二区| 日本欧美不卡| 日本一区中文字幕| 日韩av二区| 久久xxxx精品视频| 久久99影视| 99久久精品费精品国产| 亚洲精品乱码久久久久久蜜桃麻豆 | 日韩av午夜在线观看| 精品欠久久久中文字幕加勒比| 欧美va亚洲va日韩∨a综合色| 午夜视频一区二区在线观看| 国产在线一区不卡| 免费在线观看视频一区| 久久精品一本| 99成人在线视频| 日韩激情精品| 欧美aa一级| 日本午夜精品视频在线观看| 欧美日韩国产v| 日韩欧美2区| 伊伊综合在线| 91欧美日韩在线| 美女少妇全过程你懂的久久| 国产欧美成人| 五月婷婷亚洲| 欧美极品中文字幕| 喷白浆一区二区| 天堂中文在线播放| 91精品国产一区二区在线观看| 亚洲天堂av影院| 青草久久视频| 亚洲免费激情| 福利视频一区| 亚洲另类av| 三级小说欧洲区亚洲区| 91精品福利观看| 亚洲一区黄色| 久久亚洲精品中文字幕| 亚洲综合小说| 亚洲高清成人| 国产一区二区三区四区| 日本中文字幕一区二区| 亚洲午夜久久久久久尤物| 精品视频黄色| 视频一区日韩精品| 狠狠久久婷婷| 日韩视频网站在线观看| 国产精品扒开腿做爽爽爽软件| 亚洲综合欧美| 欧美日一区二区| 成人国产综合| 国产精品mv在线观看| 免费在线视频一区| 免费av一区| 日韩精品诱惑一区?区三区| 国产精品流白浆在线观看| 一区二区精品| 午夜欧美精品久久久久久久| 国产精品久久久久久久免费观看 | 国产精品久久久久久久久久白浆 | 成人羞羞视频播放网站| 久久久国产精品网站| 亚洲91网站| 香蕉久久久久久久av网站| av亚洲免费| 久久中文字幕av| 久久婷婷激情| 伊人久久高清| 中文字幕人成乱码在线观看| 精品一区二区三区免费看| 久久成人高清| 国产精品手机在线播放| 国产情侣久久| 久久精品超碰| 天海翼亚洲一区二区三区| 国产精品色网| 国产精品嫩草99av在线| 欧美日韩精品一本二本三本 | 免费精品视频最新在线| 国产色综合网| 国产毛片一区| 欧美日韩国产欧| 亚洲精品91| 亚洲精品97| 亚洲激情另类| 91精品观看| 色88888久久久久久影院| 日本欧美不卡| 亚洲国内欧美| 在线国产一区| 99综合视频| 免费观看在线综合色| 美女久久一区| 日韩一区欧美二区| 国产一区白浆| 深夜福利一区| 久久国产婷婷国产香蕉| 国产精品一页| 欧美精品99| 日韩成人免费| 日韩成人综合| 欧美69视频| 亚洲欧美视频一区二区三区| 欧美一区=区| 亚洲va久久| 国产精品久久久免费| 国产aⅴ精品一区二区四区| a国产在线视频| 久久九九精品| 亚洲综合日本| 久久国内精品自在自线400部| 国产精品超碰| se01亚洲视频| 六月婷婷一区| 国产美女久久| 久久精品午夜| 欧美高清一区| 亚洲久久视频| 久久免费精品| 国产综合视频| 日韩国产欧美在线视频| 久久99高清| 免费观看不卡av| 日韩欧美2区| 精品五月天堂| 今天的高清视频免费播放成人| 蜜桃视频在线观看一区二区| 国产精品亚洲欧美日韩一区在线| 国产一区二区三区久久| 在线一区免费| 日韩av中文在线观看| 水蜜桃久久夜色精品一区| 午夜欧美精品| 欧美专区一区| 色爱av综合网| 日韩欧美在线精品| 成人在线黄色| 乱人伦精品视频在线观看| 国产日韩高清一区二区三区在线 | 久久婷婷激情| 视频精品一区| 日韩在线观看| 伊人久久一区| 国产91在线播放精品| 亚洲欧洲一区| 精品99在线| 综合激情一区| 日韩欧美视频专区| 亚洲男人在线| 日韩毛片视频| 奇米色欧美一区二区三区| 久久久777| 欧美日本不卡高清| 久久精品观看| 久久国内精品| 日韩视频久久| 精品在线网站观看| 蜜臀av国产精品久久久久| 黄毛片在线观看| 日韩动漫一区| 午夜欧美在线| 国产在线日韩精品| 日韩在线观看一区二区三区| 久久久久欧美精品| 国产精品s色| 中文字幕一区二区精品区| 不卡一二三区|