python設計模式--觀察者模式

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

在 Python 中,觀察者模式通常由兩個主要角色組成:
1. **主題(Subject)**:主題對象維護一組觀察者對象,并提供方法來注冊、刪除和通知觀察者對象。
2. **觀察者(Observer)**:觀察者對象監聽主題對象的狀態變化,并在主題對象狀態發生變化時接收通知并做出相應的更新。

Python 中實現觀察者模式:
```python
class Subject:
? ? def __init__(self):
? ? ? ? self._observers = []

? ? def register_observer(self, observer):
? ? ? ? self._observers.append(observer)

? ? def unregister_observer(self, observer):
? ? ? ? self._observers.remove(observer)

? ? def notify_observers(self, message):
? ? ? ? for observer in self._observers:
? ? ? ? ? ? observer.update(message)

class Observer:
? ? def update(self, message):
? ? ? ? print(f"Received message: {message}")

# 創建主題對象
subject = Subject()

# 創建觀察者對象
observer1 = Observer()
observer2 = Observer()

# 注冊觀察者
subject.register_observer(observer1)
subject.register_observer(observer2)

# 主題對象狀態變化,通知觀察者
subject.notify_observers("Hello, observers!")
```

示例中,Subject 類代表主題對象,Observer 類代表觀察者對象。當主題對象狀態發生變化時,調用 notify_observers() 方法通知所有注冊的觀察者對象,觀察者對象接收到通知后調用 update() 方法進行更新操作。

觀察者模式可以幫助實現對象之間的松耦合,使主題對象和觀察者對象之間的關系更加靈活。通過這種方式,可以實現事件驅動的編程模式,提高代碼的可維護性和擴展

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

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

相關文章

PersonalLLM——探索LLM是否能根據五大人格特質重新塑造一個新的角色?

1.概述 近年來,大型語言模型(LLMs),例如ChatGPT,致力于構建能夠輔助人類的個性化人工智能代理,這些代理以進行類似人類的對話為重點。在學術領域,尤其是社會科學中,一些研究報告已經…

正心歸一、綻放真我 好普集團正一生命文化藝術大賽(中老年賽區)正式啟動

為進一步弘揚社會主義核心價值觀,弘揚生命文化,提升公眾對生命價值的認識與尊重,同時展現中老年藝術家的創作才華,激發廣大中老年朋友的藝術熱情和創造力。好普集團主辦,幸福金齡會與正一生命科學研究(廣州…

adb獲取點擊坐標并模擬點擊事件(模擬滑動)

屏幕分辨率: $ adb shell wm size Physical size: 1080x2340 獲取設備的最大X和Y: 為8639 18719 $ adb shell getevent -p | grep -e "0035" -e "0036" 0035 : value 0, min 0, max 8639, fuzz 0, flat 0, resolution 0 0036 : v…

AWS安全性身份和合規性之Artifact

AWS Artifact是對您很重要的與合規性相關的信息的首選中央資源。AWS Artifact是一項服務,提供了一系列用于安全合規的文檔、報告和資源,以幫助用戶滿足其合規性和監管要求。它允許按需訪問來自AWS和在AWS Marketplace上銷售產品的ISV的安全性和合規性報告…

網絡模型-VLAN聚合

VLAN聚合 VLAN聚合(VLAN Aggregation,也稱SuperVLAN)指在一個物理網絡內,用多個VLAN(稱為Sub-VLAN)隔離廣播域并將這些Sub-VLAN聚合成一個邏輯的VLAN(稱為SuperVLAN),這些Sub-VLAN使用同一個IP子網和缺省網關,,進而達到節約IP地址…

BOM..

區別:

基于BERT的醫學影像報告語料庫構建

大模型時代,任何行業,任何企業的數據治理未來將會以“語料庫”的自動化構建為基石。因此這一系列精選的論文還是圍繞在語料庫的建設以及自動化的構建。 通讀該系列的文章,猶如八仙過海,百花齊放。非結構的提取無外乎關注于非結構…

excel轉pdf并且加水印,利用ByteArrayOutputStream內存流不產生中間文件

首先先引入包&#xff1a;加水印和excel轉PDF的 <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.12</version></dependency><dependency><groupId>org.apache.poi&l…

2024全新爆款好物推薦,618必買數碼好物清單吐血整理!

?距離618購物狂歡節越來越近了&#xff0c;有很多日常價格不菲的產品在這次活動期間都會進行促銷活動&#xff0c;尤其是數碼類產品&#xff0c;加上618的優惠活動更有吸引力了。不過面對大促的熱潮我們消費者在選購商品的同時還是要擦亮眼睛&#xff0c;避免買到質量不好的商…

SSE 與 SASE哪個云原生安全框架更加適合

近年來&#xff0c;隨著云計算和網絡技術的不斷發展&#xff0c;出現了一種新的網絡安全解決方案——SASE&#xff08;安全訪問服務邊緣&#xff09;。SASE是一種將網絡和安全功能融合到單個基于云的服務中的框架&#xff0c;旨在提供更加安全、高效和便捷的網絡訪問體驗。SASE…

云原生周刊:Flux 2.3 發布 | 2024.5.20

開源項目推薦 kubeinvaders kubeinvaders 專為 Kubernetes 用戶設計。它提供了一種有趣而交互式的方式來探索和可視化您的 Kubernetes 集群。通過類似游戲的界面&#xff0c;用戶可以瀏覽他們的集群&#xff0c;發現資源&#xff0c;甚至模擬對 Pod 的攻擊。通過 kubeinvader…

我的前端封裝之路

最近有粉絲提問了我一個面試中遇到的問題&#xff0c;他說面試的時候&#xff0c;面試官問我&#xff1a;你在以前的項目中封裝過組件嗎&#xff1f;或者做過npm公共庫嗎&#xff1f;遇到過什么問題嗎&#xff1f;當時自己突然覺得好像沒什么可回答的啊&#xff0c;但面試結束想…

前端 CSS 經典:弧形邊框選項卡

1. 效果圖 2. 開始 準備一個元素&#xff0c;將元素左上角&#xff0c;右上角設為圓角。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, i…

thingML的學習——什么是thingML

今天開始建模的學習&#xff0c;thingML是建模的一種工具 &#xff0c;也可以理解為一種建模語言&#xff0c;有自己的語法和語義。 ThingML 支持的多種平臺和通信協議&#xff0c;如UART、I2C、MQTT、WebSocket、REST、ROS、Bluetooth、BLE和Zwave&#xff0c;通過插件機制&a…

Spring Cloud Alibaba-07-RocketMQ消息驅動

Lison <dreamlison163.com>, v1.0.0, 2024.4.20 Spring Cloud Alibaba-07-RocketMQ消息驅動 文章目錄 Spring Cloud Alibaba-07-RocketMQ消息驅動MQ簡介MQ的應用場景常見的MQ產品RocketeMQ的架構及概念 RocketMQ入門RocketMQ環境搭建 SpringBoot 集成 RocketMQ MQ簡介 …

來盤點我的校園生活(3)

來公布上期數學題答案:12 你算對了嗎&#xff1f; 今天我們班真是炸開了鍋。事情是這樣的&#xff0c;我今天早晨上學&#xff0c;學校不讓早到&#xff0c;但我一個不小心早到了&#xff0c;主任的規定是盡量不早到&#xff0c;早到不扣分&#xff0c;倒要站在那兒背書&…

Linux--軟硬鏈接

目錄 0.文件系統 1.軟硬鏈接 1.1見一下軟硬鏈接 1.2軟硬鏈接的特征 1.3軟硬鏈接是什么&#xff0c;有什么作用&#xff08;場景&#xff09; 0.文件系統 Linux--文件系統-CSDN博客 1.軟硬鏈接 1.1見一下軟硬鏈接 1.這是軟鏈接 這個命令在Unix和Linux系統中用于創建一個符號…

基于 Prometheus 的超算彈性計算場景下主機監控最佳實踐

作者&#xff1a;左知 超算場景的業務特點 主機監控&#xff0c;或許是監控/可觀測領域最傳統和普遍的需求。在超算訓練&#xff0c;AI 大規模訓練的業務場景下&#xff0c;主機監控又有哪些痛點和難點呢&#xff1f;根據我們針對多個大規模超算客戶的需求整理&#xff0c;超…

Python案例題目,入門小白題

1.抓取鏈家前十頁的數據 鏈家網址&#xff1a;長沙房產網_長沙房地產_長沙房產門戶(長沙鏈家網) 1.1.計算均價和總價 import time ? from selenium import webdriver from selenium.webdriver.common.by import By ? driver webdriver.Chrome() driver.get("https://c…

linux系統內存持續飆高的排查方法

目錄 前言&#xff1a; 1、查看系統內存的占用情況 2、找出占用內存高的進程 3、解決方法 4、補充&#xff1a;如果物理內存使用完了&#xff0c;會發生的情況 前言&#xff1a; 如果一臺服務器內存使用率持續處于一個高峰值&#xff0c;服務器可能會出現響應慢問題。例如s…