設計模式-監聽者模式

文章目錄

  • 監聽者模式

監聽者模式

監聽器模式指的是事件源經過事件的封裝傳給監聽器,當事件源觸發事件之后,監聽器收到事件的通知并執行事件回調方法。

-監聽者觀察者
概念定義當范圍對象的狀態發生變化時,服務器自動調用監聽器對象中的方法來處理事件。監聽者模式通過事件對象來傳遞事件信息,事件對象封裝了事件源對象和事件相關信息,使得事件的觸發和處理更加靈活?在對象之間定義了一對多的依賴關系,當一個對象(被觀察者)的狀態發生變化時,所有依賴它的對象(觀察者)都會收到通知并自動更新。觀察者模式簡化了事件-監聽模式的實現,主要通過被觀察者和觀察者之間的直接通知來實現狀態的更新?
應用場景監聽者模式?適用于事件類型超過1種且需要區別對待的場景。例如,監聽老板的不同指令(加班、交付等),根據不同指令執行不同操作?適用于類似發布和訂閱的場景,當有發布內容時,將發布內容推送給訂閱者即可,無需區分事件類型,區別對待?
代碼實現差異?監聽者模式?需要實現事件源、事件對象和事件監聽器三個角色。事件源需要經過事件的封裝傳遞給監聽器,監聽器接收到事件對象后進行回調處理?觀察者模式?則相對簡潔,只需要實現被觀察者和觀察者兩個角色。被觀察者在狀態變化時直接通知觀察者,觀察者收到通知后進行更新?

附觀察者模式:https://blog.csdn.net/qq_26437925/article/details/148292634

  • 事件
public class Event {// 事件類型private String type;// 事件的數據private String data;// 事件源private EventSource source;public Event(String type, String data, EventSource source) {this.type = type;this.data = data;this.source = source;}public String getType() {return type;}public void setType(String type) {this.type = type;}public String getData() {return data;}public void setData(String data) {this.data = data;}public EventSource getSource() {return source;}public void setSource(EventSource source) {this.source = source;}
}
  • 事件源(管理事件監聽器,觸發事件)
public class EventSource {// 監聽者對象private List<EventListener> listeners = new ArrayList<>();// 注冊監聽者public void registerListener(EventListener listener) {listeners.add(listener);}// 移除監聽者public void removeListener(EventListener listener) {listeners.remove(listener);}// 事件觸發,通知每個listenerpublic void fireEvent(Event event) {for (EventListener listener : listeners) {listener.handleEvent(event);}}
}
  • 事件監聽的抽象接口
public interface EventListener {// 處理監聽的事件void handleEvent(Event event);
}

測試類:

public class ListenerMainTest {public static void main(String[] args) {// 事件源, 用來觸發事件通知EventSource eventSource = new EventSource();// 監聽者EventListener listener1 = new EventListener() {@Overridepublic void handleEvent(Event event) {System.out.println("listener 1:" + event.getData());}};EventListener listener2 = new EventListener() {@Overridepublic void handleEvent(Event event) {System.out.println("listener 2:" + event.getData());}};// 注冊監聽者eventSource.registerListener(listener1);eventSource.registerListener(listener2);// 事件觸發eventSource.fireEvent(new Event("greeting", "Hello World!", eventSource));// 移除監聽者1eventSource.removeListener(listener1);eventSource.fireEvent(new Event("greeting", "Hello Again!", eventSource));}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/85154.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/85154.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/85154.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

小程序33-列表渲染

列表渲染 就是指通過循環遍歷一個數組或對象&#xff0c;將其中的每個元素渲染到頁面上 在組件上使用 wx:for 屬性綁定一個數組或對象&#xff0c;既可使用每一項數據重復渲染當前組件 每一項的變量名默認為item&#xff0c;下標變量名默認為index 在使用 wx:for進行遍歷的時候…

[ Qt ] | QRadioButton和QCheckBox的使用

目錄 QRadioButton 常用屬性 clicked(bool)信號、pressed信號、released信號 小項目 QRadioButton QRadioButton是一個單選按鈕&#xff0c;也是繼承自QAbstractButton(繼承自QWidget) 常用屬性 checkable 是否能選中 checked 是否已經被選中 autoExclusive 是否排…

[網頁五子棋][匹配模式]創建房間類、房間管理器、驗證匹配功能,匹配模式小結

文章目錄 創建房間類創建房間類實現房間管理器 實現匹配器(3)驗證匹配功能問題&#xff1a;匹配按鈕不改變驗證多開 小結 創建房間類 LOL&#xff0c;通過匹配的方式&#xff0c;自動給你加入到一個房間&#xff0c;也可手動創建游戲房間 這一局游戲&#xff0c;進行的“場所…

Apifox 5 月產品更新|數據模型支持查看「引用資源」、調試 AI 接口可實時預覽 Markdown、性能優化

Apifox 新版本上線啦&#xff01; 看看本次版本更新主要涵蓋的重點內容&#xff0c;有沒有你所關注的功能特性&#xff1a; 自動解析 JSON 參數名和參數值調試 AI 接口時&#xff0c;可預覽 Markdown 格式的內容性能優化&#xff1a;新增「實驗性功能」選項 使用獨立進程執行…

Spring MVC 框架

目錄 1.MVC的定義 2.SpringMVC的實際應用 &#xff08;1&#xff09;建立連接 1.RequestMapping注解介紹 2.RequestMapping注解的請求方式 GET請求&#xff1a; POST請求&#xff1a; 指定GET/POST方法類型&#xff1a; &#xff08;2&#xff09;請求 傳遞參數 1.傳…

基于RK3568/RK3588/全志H3/飛騰芯片/音視頻通話程序/語音對講/視頻對講/實時性好/極低延遲

一、前言說明 近期收到幾個需求都是做音視頻通話&#xff0c;很多人會選擇用webrtc的方案&#xff0c;這個當然是個不錯的方案&#xff0c;但是依賴的東西太多&#xff0c;而且相關組件代碼量很大&#xff0c;開發難度大。所以最終選擇自己屬性的方案&#xff0c;那就是推流拉…

AI+爆款文案,提示詞腳本 ——衛朋

目錄 簡介 提示詞 作者簡介 簡介 用好AI的前提是腦子里面要有框架。 AI就像是一個剛出生的小孩&#xff0c;沒有判斷力&#xff0c;瘋狂接收世界上的各類信息。 如果沒有從小的規則框架約束、沒有道德約束&#xff0c;最終的結果就一定是混亂無序的。 AI也是一樣&#x…

芯片:數字時代的算力引擎——鯤鵬、升騰、海光、Intel 全景解析

在大模型爆炸的時代&#xff0c;芯片如同現代文明的“數字心臟”&#xff0c;驅動著從智能手機、數據中心到人工智能和超級計算的每一個關鍵進程。在這場算力競賽中&#xff0c;華為鯤鵬、升騰、海光以及行業巨頭Intel各自扮演著獨特而至關重要的角色。本文將深入解析這些核心算…

傳輸層協議TCP(上)

上一篇https://blog.csdn.net/Small_entreprene/article/details/148143494?fromshareblogdetail&sharetypeblogdetail&sharerId148143494&sharereferPC&sharesourceSmall_entreprene&sharefromfrom_link 上文學習了傳輸層的協議之一UDP&#xff0c;接下來…

關于ios點擊分享自動復制到粘貼板的問題

前言 Android 系統沒有什么特別的要求&#xff0c;實現這個也比較容易。但ios在某些情況下就會出現問題。 如果ios是點擊之后&#xff0c;請求接口&#xff0c;再把接口的內容賦值給粘貼板肯定行不通&#xff0c;會被ios系統攔截&#xff0c;導致賦值失敗或者賦值為空。建議使…

SAP Business One:無錫哲訊科技助力中小企業數字化轉型的智慧之選

數字化轉型&#xff0c;中小企業的必經之路 在當今競爭激烈的商業環境中&#xff0c;數字化轉型已不再是大型企業的專利&#xff0c;越來越多的中小企業開始尋求高效、靈活的管理系統來優化業務流程、提升運營效率。作為全球領先的企業管理軟件&#xff0c;SAP Business One…

【孫悟空喝水】2022-2-7

緣由C編程問題求解:9634: 孫悟空喝水-編程語言-CSDN問答 void 孫悟空喝水() {//緣由https://ask.csdn.net/questions/7639865?spm1005.2025.3001.5141int x 2&#xff0c; n 0; double s 0, ss 0;std::cin >> n;while ((int)s < n)s 1.0 / x, ss (x - 1.0) / …

OCC筆記:BRepMesh_IncrementalMesh的使用

1. 函數接口 2. 線性偏轉與角度偏轉 2.1. theLineDeflection&#xff1a;線性偏轉 根據文檔推導下 isRelative傳入Standard_True時&#xff0c;theLineDeflection為相對值。 參看isRelative說明 //! param isRelative if TRUE deflection used for discretization of //! ea…

Visual Studio+SQL Server數據挖掘

這里寫自定義目錄標題 工具準備安裝Visual studio 2017安裝SQL Server安裝SQL Server Management Studio安裝analysis service SSMS連接sql serverVisual studio新建項目數據源數據源視圖挖掘結構部署模型設置挖掘預測 部署易錯點 工具準備 Visual studio 2017 analysis servi…

如何遷移SOS數據庫和修改sos服務的端口號

一. 遷移SOS數據庫。 1. 對SOS整個庫進行拷貝。壓縮拷貝等都可以 2. 找到SOS安裝目錄下的這個目錄 /SOS7/SERVERS7/LOCAL/ 在此目錄下會發現&#xff0c;有SOS服務庫的文件夾。拷貝你要遷移的SOS數據庫 3. 進入該文件夾&#xff0c;找到&#xff1a;serverdb.cfg 打開后&…

Oracle向PG轉移建議以及注意點

Oracle向PG轉移建議以及注意點 ? 一、語法差異與遷移建議 1. 包結構&#xff08;Package&#xff09; Oracle 支持 PACKAGE 和 PACKAGE BODY 分離定義。PostgreSQL 不支持包結構&#xff0c;需將每個函數/過程單獨定義。 遷移建議&#xff1a; 將 PACKAGE 包中的每個函數…

PCIe-PCI、PCIe中斷機制概述

PCI、PCIe中斷概述 PCIe 中斷機制在繼承 PCI 傳統中斷&#xff08;INTx&#xff09;的基礎上&#xff0c;引入了更高效的 MSI/MSI-X 方案&#xff0c;以提升設備性能并減少 CPU 輪詢開銷。以下是核心要點及技術演進&#xff1a; ?? ??一、PCIe 中斷類型與演進?? ??IN…

改進自己的圖片 app

1. 起因&#xff0c; 目的: 前面我寫過一個圖片 app &#xff0c; 最新做了些改動。 把原來的一列&#xff0c;改為3列&#xff0c; 繼續使用瀑布流手機上使用&#xff0c;更流暢&#xff0c;橫屏顯示為2列。 2. 先看效果 3. 過程: 過程太細碎了&#xff0c;這里只是做一下…

【HTML-15】HTML表單:構建交互式網頁的基石

表單是HTML中最強大的功能之一&#xff0c;它允許網頁收集用戶輸入并與服務器進行交互。無論是簡單的搜索框、登錄頁面&#xff0c;還是復雜的多步驟調查問卷&#xff0c;表單都是實現這些功能的核心元素。本文將深入探討HTML表單的各個方面&#xff0c;幫助您構建高效、用戶友…

關于智能體接入后端,在Apifox能夠傳參數給智能體的測試

from flask import Flask, request, jsonify, render_template import requests import json # 用于解析嵌套的 JSON 字符串app Flask(__name__)COZE_BOT_ID 7508736911423963162 COZE_API_KEY pat_cHXqrFzcvtktfmmlp4pjF3O2qmjioQW46uU8UNbUugyvSlFZclklpunc53DbR8ws COZE…