国产探花免费观看_亚洲丰满少妇自慰呻吟_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,還在孵化階段。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 靖边县| 岳阳县| 陕西省| 阿克苏市| 正定县| 台南市| 理塘县| 海丰县| 绥中县| 凉山| 天津市| 招远市| 永泰县| 嘉定区| 仙桃市| 屏山县| 蓬安县| 兴业县| 凌云县| 玛沁县| 黄平县| 朝阳市| 格尔木市| 吉林省| 怀柔区| 凭祥市| 西宁市| 尤溪县| 当阳市| 岑溪市| 东安县| 神农架林区| 舒兰市| 邵阳市| 渑池县| 南汇区| 秭归县| 洞口县| 个旧市| 绥中县| 敖汉旗|