国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

(九)觀察者模式

2019-11-08 18:50:45
字體:
來源:轉載
供稿:網友

觀察者模式(又被稱為發布-訂閱(Publish/Subscribe)模式,屬于行為型模式的一種,它定義了一種一對多的依賴關系,讓多個觀察者對象同時監聽某一個主題對象。這個主題對象在狀態變化時,會通知所有的觀察者對象,使他們能夠自動更新自己。

這里寫圖片描述

Subject:抽象主題(抽象被觀察者),抽象主題角色把所有觀察者對象保存在一個集合里,每個主題都可以有任意數量的觀察者,抽象主題提供一個接口,可以增加和刪除觀察者對象。ConcreteSubject:具體主題(具體被觀察者),該角色將有關狀態存入具體觀察者對象,在具體主題的內部狀態發生改變時,給所有注冊過的觀察者發送通知。Observer:抽象觀察者,是觀察者者的抽象類,它定義了一個更新接口,使得在得到主題更改通知時更新自己。ConcrereObserver:具體觀察者,是實現抽象觀察者定義的更新接口,以便在得到主題更改通知時更新自身的狀態。

舉個例子,比如某個品牌的車由于某種故障需要召回,這時4S電發出通知,所有符合召回條件的車,接收到通知去4S點,把故障修復掉。

首先要有個抽象的觀察者,負責觀察這件事

public interface Observer { public void updateCar(String message);}

所有的車主,都是觀察者

public class Owner implements Observer { PRivate String ownerName; public Owner(String ownerName) { this.ownerName = ownerName; } @Override public void updateCar(String message) { System.out.println(ownerName + "-" + message); }}

要有個4s店的抽象類,類里面方法有添加車主,刪除車主,和發通知

public interface Stores_4s { /** * 增加訂閱者 * @param observer */ public void attach(Observer observer); /** * 刪除訂閱者 * @param observer */ public void detach(Observer observer); /** * 通知訂閱者更新消息 */ public void notify(String message);}

創建一個東風4S店

public class DFStores implements Stores_4s { private List<Observer> ownerList = new ArrayList<Observer>(); @Override public void attach(Observer observer) { ownerList.add(observer); } @Override public void detach(Observer observer) { ownerList.remove(observer); } @Override public void notify(String message) { for (Observer observer: ownerList) { observer.updateCar(message); } } public static void main(String[] args) { Stores_4s stores = new DFStores(); Owner owner = new Owner("張三"); Owner owner1 = new Owner("李四"); Owner owner2 = new Owner("王五"); stores.attach(owner); stores.attach(owner1); stores.attach(owner2); stores.notify("發動機故障,需要召回換發動機。"); }}

優點當然就是解耦了,讓耦合的雙方都依賴于抽象,從而使得各自的變換都不會影響另一邊的變換。

如果觀察者比較多,或者其中一個觀察者執行時間比較長,就會導致整個程序比較慢,現在大多數情況下,都是采用MQ的異步消息通知機制。常用的MQ有,RabbitMq、ActiveMq、ZeroMq、kafka。還有阿里的RocketMQ,已經捐獻給了apache,還在孵化階段。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 开平市| 乌海市| 威海市| 九江县| 崇信县| 榆社县| 长葛市| 沾益县| 宕昌县| 读书| 贡嘎县| 蒙山县| 图片| 当阳市| 长春市| 都匀市| 曲麻莱县| 潮州市| 页游| 秦皇岛市| 海口市| 临潭县| 太白县| 志丹县| 固原市| 翼城县| 抚顺市| 浦江县| 安平县| 双牌县| 海淀区| 广丰县| 右玉县| 万州区| 南投县| 南召县| 邵阳市| 云梦县| 阿鲁科尔沁旗| 麻阳| 上蔡县|