您现在的位置是:Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款 >
04 java 訂閱者模式(java設計模式-回調、事件監聽器、觀察者模式)
Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款2024-07-29 15:30:33【】5人已围观
简介源source:openWindows通知一個事件源source:openWindowsdoOpensomething...到這里你應該非常清楚的了解,什么是事件監聽器模式了吧。那么哪里是回調接口,哪
通知一個事件源 source :openWindows
doOpen something...
到這里你應該非常清楚的了解,什么是事件監聽器模式了吧。 那么哪里是回調接口,哪里是回調者,對!EventListener是一個回調接口類,handleEvent是一個回調函數接口,通過回調模型,EventSource 事件源便可回調具體監聽器動作。
有了了解后,這里還可以做一些變動。 對特定的事件提供特定的關注方法和事件觸發
public class EventSource {
...
public void onCloseWindows(EventListener eventListener){
System.out.println("關注關閉窗口事件");
ListenerList.add(eventListener);
}
}
public static void main(String[] args) {
EventSource windows = new EventSource();
/
*** 另一種實現方式
*/
//關注關閉事件,實現回調接口
windows.onCloseWindows(new EventListener(){
}
這種就類似于,我們的窗口程序,Button監聽器了。我們還可以為單擊、雙擊事件定制監聽器。
觀察者模式
什么是觀察者模式
觀察者模式其實原理和監聽器是一樣的,使用的關鍵在搞清楚什么是觀察者、什么是被觀察者。
觀察者(Observer)相當于事件監器。有個微博模型比較好理解,A用戶關注B用戶,則A是B的觀察者,B是一個被觀察者,一旦B發表任何言論,A便可以獲得。
被觀察者(Observable)相當于事件源和事件,執行事件源通知邏輯時,將會回調observer的回調方法update。
舉個例子
為了方便,同樣我直接使用jdk自帶的Observer。
一個觀察者
public class WatcherDemo implements Observer {
@Override
public void update(Observable o, Object arg) {
if(arg.toString().equals("openWindows")){
System.out.println("已經打開窗口");
}
}
}
被觀察者
Observable 是jdk自帶的被觀察者,具體可以自行看源碼和之前的監聽器事件源類似。
主要方法有
addObserver() 添加觀察者,與監聽器模式類似
notifyObservers() 通知所有觀察者
類Watched.java的實現描述:被觀察者,相當于事件監聽的事件源和事件對象。又理解為訂閱的對象 主要職責:注冊/撤銷觀察者(監聽器),接收主題對象(事件對象)傳遞給觀察者(監聽器),具體由感興趣的觀察者(監聽器)執行
/
**}
測試執行
public static void main(String[] args) {
Watched watched = new Watched();
WatcherDemo watcherDemo = new WatcherDemo();
watched.addObserver(watcherDemo);
watched.addObserver(new Observer(){
@Override
public void update(Observable o, Object arg) {
if(arg.toString().equals("closeWindows")){
System.out.println("已經關閉窗口");
}
}
});
//觸發打開窗口事件,通知觀察者
watched.notifyObservers("openWindows");
//觸發關閉窗口事件,通知觀察者
watched.notifyObservers("closeWindows");
控制臺輸出:
已經打開窗口
已經關閉窗口
總結
從整個實現和調用過程來看,觀察者和監聽器模式基本一樣。
有興趣的你可以基于這個模型,實現一個簡單微博加關注和取消的功能。 說到底,就是事件驅動模型,將調用者和被調用者通過一個鏈表、回調函數來解耦掉,相互獨立。
“你別來找我,有了我會找你”。
整個設計模式的初衷也就是要做到低耦合,低依賴。
再延伸下,消息中間件是什么一個模型? 將生產者+服務中心(事件源)和消費者(監聽器)通過消息隊列解耦掉. 消息這相當于具體的事件對象,只是存儲在一個隊列里(有消峰填谷的作用),服務中心回調消費者接口通過拉或取的模型響應。 想必基于這個模型,實現一個簡單的消息中間件也是可以的。
還比如gava ListenableFuture,采用監聽器模式就解決了future.get()一直阻塞等待返回結果的問題。
有興趣的同學,可以再思考下觀察者和責任鏈之間的關系, 我是這樣看的。
同樣會存在一個鏈表,被觀察者會通知所有觀察者,觀察者自行處理,觀察者之間互不影響。 而責任鏈,講究的是擊鼓傳花,也就是每一個節點只需記錄繼任節點,由當前節點決定是否往下傳。 常用于工作流,過濾器web filter。
很赞哦!(718)
相关文章
- 01 買粉絲頭像會不會侵權(用別人的畫當頭像侵權嗎)
- 01 買粉絲圖文怎么復制到word(如何一步復制買粉絲圖文消息到Word)
- 01 買粉絲圖片形式怎么做的(買粉絲封面三張圖片怎么弄)
- 04 江西聚源貿易有限公司(中華老字號有哪些?)
- 04 江西中恒汽車貿易有限公司(昌河鈴木汽車4s店)
- 04 江門市生達行貿易有限公司(江門有什么特產)
- 04 沈陽五月花國際貿易有限公司(中國第一旅游飯店中國第一家星級飯店)
- 04 江蘇貿易上市公司排名(2021國內貿易企業排名前十是哪些)
- 04 河北對外經貿易學院(石藥集團恩必普藥業有限公司是國企嗎)
- 01 買粉絲地圖怎么做(如何在買粉絲買粉絲圖文消息中插入地圖和導航?)
Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款的名片
职业:程序员,设计师
现居:内蒙古呼伦贝尔鄂温克族自治旗
工作室:小组
Email:[email protected]
热门文章
站长推荐
01 買粉絲圖片點擊不放大(買粉絲圖片不能放大)
04 江蘇省華茂貿易有限公司(中國海事局指定哪些地方可以賣海圖?)
01 買粉絲圖片上傳失敗是為什么(買粉絲買粉絲無法上傳圖片怎么辦?)
04 滄州博興汽車貿易有限公司(順豐快遞可以郵寄蛋糕嗎)
04 汽車貿易股票有哪些(關于2023特斯拉相關股票還有哪些?)
04 江門網紅打卡點在哪里啊(新會彩虹海岸網紅打卡地點)
04 江西外語外貿職業學院是提前批嗎(申請英國留學雙非二本可以申請排名在什么范圍的學校?)
04 河北對外經貿職業學院新生群(期望找到適合女孩子的學校專業或者行業,可以自己創業的.請大家根據自己的經驗各述已見.采用者加高分酬謝~~)