觀察者模式 (Observer Pattern)

觀察者模式(Observer Pattern)是一種行為型設計模式。它定義了一種一對多的依賴關系,讓多個觀察者對象同時監聽某一個主題對象。當主題對象的狀態發生變化時,會自動通知所有觀察者對象,使它們能夠自動更新自己的狀態。

一、基礎

1. 意圖

核心目的:定義對象間的一種一對多的依賴關系,當一個對象的狀態發生改變時,所有依賴于它的對象都得到通知并被自動更新。

2. 使用場景

典型應用

  • 當一個抽象模型有兩個方面,其中一個方面依賴于另一個方面
  • 當一個對象的改變需要同時改變其他對象,而不知道具體有多少對象需要改變
  • 當一個對象必須通知其他對象,而又不希望與這些對象緊耦合

具體案例

  • 股票價格變動通知投資者
  • 氣象站數據變化更新多個顯示板
  • 電商系統中的庫存變化通知
  • 社交媒體中的消息推送

3. 模式結構

  • 主題(Subject):也被稱為被觀察對象或可觀察對象,它維護了一個觀察者列表,提供了添加、刪除觀察者以及通知觀察者的方法。
  • 觀察者(Observe

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

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

相關文章

Network.framework 的引入,不是為了取代 URLSession

Network.framework 的引入,不是為了取代 URLSession 如果你感覺 Network.framework 的引入, 可能是為了取代 URLSession, 那你就大錯特錯了!這里需要非常準確地區分一下: 🔵 Network.framework 不是為了取代 URLSession。 &…

Redis 數據分片三大方案深度解析與 Java 實戰

Redis 數據分片是將數據分散存儲在多個 Redis 實例上的技術,以解決單個 Redis 實例在存儲容量、性能和可用性上的限制。常見的 Redis 數據分片方案包括客戶端分片、代理分片和Redis Cluster(集群分片),以下為你詳細介紹&#xff1…

FreeBSD可以不經過windows服務器訪問windows機器上的共享文件嗎?

答案是:當然可以! 使用sharity-light 軟件 可以使用sharity-light 軟件,直接不用安裝samba等軟件,直接訪問windows機器上的共享文件。 但是可惜的是,sharity-light在FreeBSD的ports里棄用了。看來是從FreeBSD 8 就開…

主流 LLM 部署框架

主流 LLM 部署框架 框架主要特點適用場景vLLM- 超快推理(高吞吐) - 動態批處理 - 支持 HuggingFace Transformer - 支持 PagedAttention高并發、低延遲在線推理TGI (Text Generation Inference)- Huggingface官方出品 - 多模型管理 - 支持動態量化 - 支持…

在 Vue 3 setup() 函數中使用 TypeScript 處理 null 和 undefined 的最佳實踐

在 Vue 3 中使用 setup() 函數和 TypeScript 時,null 和 undefined 是兩個需要特別關注的類型。雖然它們看起來都表示“沒有值”,但它們在 JavaScript 和 TypeScript 中有著不同的含義和使用場景。如果不小心處理它們,可能會導致潛在的 bug 或…

在 UniApp 中獲取當前頁面地址

在 UniApp 中獲取當前頁面地址,可以通過以下步驟實現: 方法說明: 獲取當前頁面實例:使用 getCurrentPages() 獲取頁面棧數組,最后一個元素即為當前頁面實例。 提取頁面路徑和參數:從頁面實例的 route 屬性…

【華為】防火墻雙擊熱備-之-主備模式-單外網線路-分享

FW1和FW2的業務接口都工作在三層,上行連接二層交換機。上行交換機連接運營商的接入點,運營商為企業分配的IP地址為100.100.100.2。現在希望FW1和FW2以主備備份方式工作。正常情況下,流量通過FW1轉發;當FW1出現故障時,流…

crossOriginLoading使用說明

1. 說明 此配置用于控制 Webpack 動態加載的代碼塊&#xff08;chunk&#xff09;&#xff08;例如代碼分割或懶加載的模塊&#xff09;在跨域&#xff08;不同域名&#xff09;加載時的行為。它通過為動態生成的 <script>標簽添加 crossorigin 屬性&#xff0c;確保符合…

windows中安裝VMware Workstation Pro虛擬機和ubuntu

目錄 一、安裝 VMware Workstation Pro 虛擬機 1、官網下載VMware Workstation Pro 1.1 選中 "VMware Workstation Pro for PC" 的 "DOWNLOAD NOW" 1.2 跳轉到broadcom登錄頁面 1.3 注冊賬號 1.4 輸入給郵箱收到的驗證碼信息&#xff0c;然后點擊”Verify…

如何快速輕松地恢復未保存的 Word 文檔:簡短指南

文字處理器已經存在了幾十年&#xff0c;其中許多已經變得非常擅長防止問題。丟失未保存的數據是一個常見問題&#xff0c;因此辦公軟件通常帶有恢復文件的方法。在本文中&#xff0c;我們將介紹如何恢復 Word 文檔&#xff0c;即使您尚未保存它。 確保數據安全的最佳方法是保…

JavaScript原生實現簡單虛擬列表(列表不定高)

本文首發在我的個人博客上&#xff1a;JavaScript原生實現簡單虛擬列表(列表不定高)https://www.brandhuang.com/article/1745637125513 前言 之前實現了一個定高版本的虛擬列表&#xff0c;今天在定高版本的基礎上稍作調整&#xff0c;來實現不定高版本&#xff0c;之前的版本…

redis數據類型-位域bitfield

redis數據類型-位域bitfield 文檔 redis單機安裝redis常用的五種數據類型redis數據類型-位圖bitmapredis數據類型-基數統計HyperLogLogredis數據類型-地理空間GEOredis數據類型-流Stream 官方文檔 官網操作命令指南頁面&#xff1a;https://redis.io/docs/latest/commands/…

pandas讀取MySQL中的數據

使用pandas讀取MySQL中的數據 1、導入庫 pip install pandas pip install sqlalchemy2、示例代碼 # -*- coding: utf-8 -*-import pandas as pd import re from sqlalchemy import create_engine# 清洗文本 def clean_text(text):text

MyBatis緩存配置的完整示例,包含一級緩存、二級緩存、自定義緩存策略等核心場景,并附詳細注釋和總結表格

以下是MyBatis緩存配置的完整示例&#xff0c;包含一級緩存、二級緩存、自定義緩存策略等核心場景&#xff0c;并附詳細注釋和總結表格&#xff1a; 1. 一級緩存&#xff08;默認開啟&#xff09; // 使用同一SqlSession執行兩次查詢&#xff0c;自動命中一級緩存 try (SqlSe…

深入解析 C++17 中的std::variant與std::visit:從原理到實踐

引言 什么是std::variant 在 C17 之前&#xff0c;如果你想在一個變量中存儲多種可能的類型&#xff0c;通常會使用 union 或 void* 指針。然而&#xff0c;這些方法都有明顯的缺點。 使用 union 時&#xff0c;類型信息會丟失&#xff0c;使得代碼容易出錯。 void* 指針則需…

Dijkstra算法對比圖神經網絡(GNN)

什么是AI模型? AI模型(人工智能模型)是一類模仿人類智能行為的數學模型或算法。它們通過從大量數據中學習,識別模式、做出預測或決策。常見的AI模型包括機器學習模型(如決策樹、神經網絡、支持向量機)和深度學習模型(如卷積神經網絡CNN、循環神經網絡RNN)。簡單來說,…

Yarn 安裝與使用教程

Yarn 安裝與使用教程 Yarn 是一個由 Facebook 開發的 JavaScript 包管理工具&#xff0c;它比傳統的 npm 更加高效、可靠&#xff0c;并且在性能上有所提升。Yarn 主要解決了 npm 安裝速度慢、并發性差、緩存機制不完善等問題&#xff0c;它提供了更快的安裝速度、更穩定的依賴…

Spring Boot 的配置加載順序

Spring Boot 的配置加載順序是“后來居上”——優先級高的配置源會覆蓋優先級低的配置源中的同名配置 覆蓋規則如下&#xff1a; 后加載的配置具有更高的優先級&#xff0c;會覆蓋先加載的配置。如果多個配置源中存在同名配置項&#xff0c;最終生效的是具有最高優先級的那個…

Git分支重命名與推送參數解析

這兩個參數的解釋如下&#xff1a; git branch -M master 中的 -M 參數 -M 是 --move --force 的組合簡寫&#xff0c;表示強制重命名當前分支為 master。如果當前分支已經存在名為 master 的分支&#xff0c;-M 會強制覆蓋它&#xff08;慎用&#xff0c;可能導致數據丟失&…

qt源碼編譯

問題1&#xff1a; 源碼頭文件問題&#xff1a; 有部分頭文件缺少#include<limits>頭文件 home/jetson/qt-everywhere-src-5.15.2/qtbase/include/QtCore/qfloat16.h /home/jetson/qt-everywhere-src-5.15.2/qtbase/src/corelib/text/qbytearraymatcher.h 問題2&…