設計模式——————觀察者模式

工廠模式分為簡單工廠,工廠和抽象工廠,三種工廠的實現是越來越復雜的。

觀察者模式

? ? ? 本質上就是一種訂閱/發布的模型,從邏輯上來說就是一對多的依賴關系

? ? ? 什么意思呢?好比是一群守衛盯著一個囚犯,只要囚犯一有異動,守衛就必須馬上采取行動(也有可能是更新狀態,本質上也是一種行動),那么守衛就是觀察者,囚犯就是被觀察者。

? ? ? 解決的問題:

? ? ? 在系統中,實現這種一對多的而且之間有一定關聯的邏輯的時候,由于需要保持他們之間的協同關系,所以最簡便的方法是采用緊耦合。但是這樣加大了開發難度,很容易造成Bug

? ?? 觀察者模式就解決了這么一個問題,在保持一系列觀察者和被觀察者對象協同工作的同時,把之間解耦了。

? ??

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

主要解決:一個對象狀態改變給其他對象通知的問題,而且要考慮到易用和低耦合,保證高度的協作。

何時使用:一個對象(目標對象)的狀態發生改變,所有的依賴對象(觀察者對象)都將得到通知,進行廣播通知。

如何解決:使用面向對象技術,可以將這種依賴關系弱化。

關鍵代碼:在抽象類里有一個 ArrayList 存放觀察者們。

應用實例:?1、京東上某個商品暫時沒貨,提示用戶關注后到貨通知,這個暫時無貨的商品是被觀察者,點擊關注這個商品的用戶就是觀察者。 2、老師針對成績在60分以下的同學定期發送最新的考題分析郵件,每輪考試下來都會有不及格的同學,由不及格變為及格的同學自動從郵件列表里移除,新的不及格的同學會被加進郵件列表里。

優點:?1、觀察者和被觀察者是抽象耦合的。 2、建立一套觸發機制。

缺點:?1、如果一個被觀察者對象有很多的直接和間接的觀察者的話,將所有的觀察者都通知到會花費很多時間。 2、如果在觀察者和觀察目標之間有循環依賴的話,觀察目標會觸發它們之間進行循環調用,可能導致系統崩潰。 3、觀察者模式沒有相應的機制讓觀察者知道所觀察的目標對象是怎么發生變化的,而僅僅只是知道觀察目標發生了變化。

使用場景:?1、有多個子類共有的方法,且邏輯相同。 2、重要的、復雜的方法,可以考慮作為模板方法。

轉載于:https://www.cnblogs.com/FMOON/p/8934079.html

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

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

相關文章

SNMP簡介

SNMP簡介介紹SNMP的定義、目的、版本演進以及受益。 定義簡單網絡管理協議SNMP(Simple Network Management Protocol)是廣泛應用于TCP/IP網絡的網絡管理標準協議。SNMP提供了一種通過運行網絡管理軟件的中心計算機(即網絡管理工作站&#xff…

詳解vue生命周期及每個階段適合進行的操作

VUE生命周期的四個階段 create 創建 -------- 創建vue實例并初始化mount 掛載 -------- 把vue實例和視圖進行關聯update 更新 ------- 監聽數據與視圖的變化destroy銷毀 ------- 銷毀實例生命周期 --- 鉤子函數 vue為上面的4個大的階段提供了一個可編程的接口,我們可…

.Net 7 新編譯器 ILC 簡析

楔子:這個新編譯器的全稱是ILCompiler。是之前CoreRT項目合并過來的,在.Net 7成熟,并且可以產業化應用。本質:ILC編譯器的本質除了構建CLR的所擁有的主要功能,還包含了對LLVM這種意圖取代GCC編譯器的操作,對…

mac 防止 下載 睡眠_如何暫時防止Mac進入睡眠狀態

mac 防止 下載 睡眠Let’s say you start a big download, then go to bed. When you wake up, you realize your Mac went to sleep before finishing its job. Isn’t there some way to stop this? 假設您開始進行大量下載,然后上床睡覺。 當您醒來時&#xff0…

ubuntu安裝chrome driver

首先下載Chrome Driver(Firefox Driver的安裝與該步驟相同) 鏈接: http://chromedriver.storage.googleapis.com/index.html 接下來在控制臺(terminal)上操作一下紅色字體的指令: Install Unzipsudo apt-ge…

深入理解Spring異常處理

宜信技術學院1.前言相信我們每個人在SpringMVC開發中,都遇到這樣的問題:當我們的代碼正常運行時,返回的數據是我們預期格式,比如json或xml形式,但是一旦出現了異常(比如:NPE或者數組越界等等&am…

基于React開發范式的思考:寫在Lesx發布之際

例子:lesx-example webpack loader: lesx-loader 一些背景 現在前端框架已經呈現出React、Angular、Vue三足鼎立的局勢,對于三者的對比以及技術選型的思考與爭論也被討論了非常多,比如知乎上的這個問題:react.js,angular.js,vue.j…

mac共享單個磁盤_如何與您的所有設備共享酒店的單個Wi-Fi連接

mac共享單個磁盤Many hotels still limit you to one or two Wi-Fi devices per room–a frustrating limitation, especially when traveling with someone else. Connection restrictions can apply anywhere you have to log into a Wi-Fi network via a portal instead of …

Python FastApi:快速建立docker容器/掛載共享文件夾/導入導出

一、目的 a.快速把原有fastapi代碼部署到docker,讓docker在server運行。 b.不涉及docker深入設置。 c.使用python第三方lib少或簡單。 二、步驟 ps:請提前安裝docker 1.新建Dockerfile,放入到項目根目錄 a.Dockerfile沒有后綴. b.準備好requireme…

PHP-FPM 與 Nginx 的通信機制總結

PHP-FPM 介紹 CGI 協議與 FastCGI 協議 每種動態語言( PHP,Python 等)的代碼文件需要通過對應的解析器才能被服務器識別,而 CGI 協議就是用來使解釋器與服務器可以互相通信。PHP 文件在服務器上的解析需要用到 PHP 解釋器,再加上對…

Android——監聽事件總結

各種監聽事件 1.按鈕 Button(1)點擊監聽btn_1.setOnClickListener(new View.OnClickListener() { (2)長按監聽btn_1.setOnLongClickListener(new View.OnLongClickListener() { 2.單選框 RadioGroupradio_gp.setOnCheckedChangeLi…

ChatGPT 大智近妖,從宇宙人生到手搓光刻機,從哄女朋友到寫年終總結我們聊得非常開心,反而讓人越來越憂心...

都說 ChatGPT 要干掉程序員,清理搜索引擎,取代Stack Overflow,還能消滅人類,這些有些言過其實了。ChatGPT 的定位是一個人工智能助理,它說,它的主要目的是通過回答用戶的問題,為用戶提供幫助。在…

如何在Windows Defender中安排掃描

Windows Defender automatically performs background scans during your PC’s idle moments, but doesn’t include an easy way to schedule a full scan. There is a way to do it, though. Windows Defender在PC空閑時自動執行后臺掃描,但是沒有包括安排完整掃…

復習深入筆記02:魔法方法/cookie,session,token/異常

魔法方法 對象生成 1.先調用__new__方法,生成空對象。控制對象生成。 2.當執行“對象類名(namelqz)”,觸發類的__init__()

比特熊故事匯獨家 | .NET 感恩專場

點擊上方藍字關注我們(本文閱讀時間:15分鐘)大家好!我是愛吃、愛玩、更愛學習技術,IT界新晉小紅人,開發者的好朋友——比特熊!比特熊:本期故事匯是.NET專場,今天一次性邀請到DOTNET領…

Ubuntu Core 給物聯網提供更多安全支持

開發四年只會寫業務代碼,分布式高并發都不會還做程序員? Canonical 是 Ubuntu 的一個桌面環境,該公司目前在云服務業務賺到了錢。因為 Ubuntu Core 為嵌入式設備帶來了 Ubuntu 18.04 長期支持(LTS)代碼庫。Ubuntu Core 的鏡像大小為 260MB&…

semantic ui要裝什么才能使用

作者:呆呆笨笨鏈接:https://www.zhihu.com/question/32233356/answer/196799506來源:知乎著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。本答案將以兩種方式講解如何從零開始使用 Semantic-UI,…

用戶帳戶控制設置_創建快捷方式以避免用戶帳戶控制彈出式快捷方式

用戶帳戶控制設置There are numerous applications which, when launched, result in a UAC (User Account Control) warning being displayed. There are reasons why this security measure is a good idea, but it can also be extremely irritating. ElevatedShortcut lets…

Java Observer Pattern(觀察者模式)

當對象間存在一對多關系時,則使用觀察者模式(Observer Pattern)。比如,當一個對象被修改時,則會自動通知它的依賴對象。觀察者模式屬于行為型模式。 關鍵代碼:在抽象類里有一個 ArrayList 存放觀察者們。 優…