欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java設(shè)計(jì)模式之觀察者模式observer?pattern詳解

 更新時(shí)間:2023年12月04日 10:16:45   作者:制造bug的鍵盤(pán)鋼琴師  
這篇文章主要介紹了Java設(shè)計(jì)模式之觀察者模式observer?pattern詳解,當(dāng)一個(gè)對(duì)象發(fā)生數(shù)據(jù)變化時(shí),通知其他相關(guān)的一系列對(duì)象,接受到通知的對(duì)象根據(jù)該對(duì)象的變化進(jìn)行相應(yīng)處理以響應(yīng)變化的過(guò)程,需要的朋友可以參考下

觀察者模式

簡(jiǎn)介:

當(dāng)一個(gè)對(duì)象發(fā)生數(shù)據(jù)變化時(shí),通知其他相關(guān)的一系列對(duì)象,接受到通知的對(duì)象根據(jù)該對(duì)象的變化進(jìn)行相應(yīng)處理以響應(yīng)變化的過(guò)程。

概念解析:

其實(shí)與ActiveMQ、RabbitMQ等中間件的基本運(yùn)行模式相類(lèi)似,觀察者模式的基礎(chǔ)構(gòu)建方式非常相近,其分為觀察者與被觀察者兩個(gè)部分。

(一)觀察者:從字面上看也就是指進(jìn)行觀察的對(duì)象,對(duì)應(yīng)來(lái)說(shuō)也就是消息訂閱者;

(二)被觀察者:當(dāng)然被觀察者也就是指被觀察的對(duì)象,相應(yīng)的角色也就是消息發(fā)布者。

運(yùn)行方式:

推:消息以類(lèi)似廣播的形式通知觀察者,觀察者只能被動(dòng)、無(wú)條件接受;

拉:接收到被觀察者的通知,可以自主決定獲取消息。

觀察者模式的實(shí)現(xiàn)

兩種方式實(shí)現(xiàn)觀察者設(shè)計(jì)模式的實(shí)現(xiàn),具體如下:

【1】手寫(xiě)觀察者設(shè)計(jì)模式

【2】Java API 提供的觀察者設(shè)計(jì)模式 使用 Java API 提供的 Observer 和 Observeable 實(shí)現(xiàn)觀察者模式

手寫(xiě)觀察者設(shè)計(jì)模式

編寫(xiě)被觀察對(duì)象:subject.java

在這里插入圖片描述

編寫(xiě)觀察者接口,起到統(tǒng)一規(guī)范作用.

在這里插入圖片描述

實(shí)現(xiàn)Observer接口,我們可以有一個(gè)或多個(gè)觀察者對(duì)一個(gè)subject進(jìn)行觀察

在這里插入圖片描述

編寫(xiě)主類(lèi),進(jìn)行運(yùn)行展示

在這里插入圖片描述

運(yùn)行接口展示:

在這里插入圖片描述

通過(guò)API實(shí)現(xiàn)觀察者模式

通過(guò)繼承Observable父類(lèi),構(gòu)建一個(gè)被觀察者

在這里插入圖片描述

實(shí)現(xiàn)Observer創(chuàng)建一個(gè)觀察者類(lèi)

在這里插入圖片描述

通過(guò)編寫(xiě)主類(lèi)測(cè)試類(lèi)觀察結(jié)果:

在這里插入圖片描述

觀察者模式的優(yōu)缺點(diǎn)

優(yōu)點(diǎn):觀察者與被觀察者抽象耦合,可定義一種穩(wěn)定的消息觸發(fā)機(jī)制。 缺點(diǎn):如果被觀察者有多個(gè)間接的觀察者,消息的傳遞將消耗更多時(shí)間,如果觀察者與被觀察者之間循環(huán)依賴(lài),最終會(huì)導(dǎo)致系統(tǒng)崩潰。也正因如此與隊(duì)列消息相類(lèi)似,我們一般會(huì)單獨(dú)開(kāi)一個(gè)線程讓其進(jìn)行運(yùn)行,以避免程序堵塞,不能運(yùn)行的尷尬。

使用場(chǎng)景:

一個(gè)抽象模型有兩個(gè)方面,其中一個(gè)方面依賴(lài)于另一個(gè)方面。將這些方面封裝在獨(dú)立的對(duì)象中使它們可以各自獨(dú)立地改變和復(fù)用。 一個(gè)對(duì)象的改變將導(dǎo)致其他一個(gè)或多個(gè)對(duì)象也發(fā)生改變,而不知道具體有多少對(duì)象將發(fā)生改變,可以降低對(duì)象之間的耦合度。 一個(gè)對(duì)象必須通知其他對(duì)象,而并不知道這些對(duì)象是誰(shuí)。 需要在系統(tǒng)中創(chuàng)建一個(gè)觸發(fā)鏈,A對(duì)象的行為將影響B(tài)對(duì)象,B對(duì)象的行為將影響C對(duì)象……,可以使用觀察者模式創(chuàng)建一種鏈?zhǔn)接|發(fā)機(jī)制。

注意事項(xiàng):

1、JAVA 中已經(jīng)有了對(duì)觀察者模式的支持類(lèi)。

2、避免循環(huán)引用。

3、如果順序執(zhí)行,某一觀察者錯(cuò)誤會(huì)導(dǎo)致系統(tǒng)卡殼,一般采用異步方式。

到此這篇關(guān)于Java設(shè)計(jì)模式之觀察者模式observer pattern詳解的文章就介紹到這了,更多相關(guān)Java觀察者模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于Spring框架中異常處理情況淺析

    關(guān)于Spring框架中異常處理情況淺析

    最近學(xué)習(xí)Spring時(shí),認(rèn)識(shí)到Spring異常處理的強(qiáng)大,這篇文章主要給大家介紹了關(guān)于Spring框架中異常處理情況的相關(guān)資料,通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-08-08
  • Java annotation元注解原理實(shí)例解析

    Java annotation元注解原理實(shí)例解析

    這篇文章主要介紹了Java annotation元注解原理實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • 淺談springboot自動(dòng)裝配原理

    淺談springboot自動(dòng)裝配原理

    作為Spring Boot的精髓,自動(dòng)配置原理首當(dāng)其沖.今天就帶大家了解一下springboot自動(dòng)裝配的原理,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們很有幫助,需要的朋友可以參考下
    2021-05-05
  • Maven導(dǎo)入依賴(lài)時(shí)報(bào)錯(cuò)如何解決

    Maven導(dǎo)入依賴(lài)時(shí)報(bào)錯(cuò)如何解決

    這篇文章主要介紹了Maven導(dǎo)入依賴(lài)時(shí)報(bào)錯(cuò)如何解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • 解決J2EE-session在瀏覽器關(guān)閉后失效問(wèn)題

    解決J2EE-session在瀏覽器關(guān)閉后失效問(wèn)題

    最近做項(xiàng)目使用的是Spring+SpringMVC+Mybatis框架,maven管理目錄的javaweb端系統(tǒng),對(duì)于session的一些問(wèn)題,在此小編給大家分享到腳本之家平臺(tái),需要的朋友參考下吧
    2018-01-01
  • spring配置文件中util:properties和context:property-placeholder用法

    spring配置文件中util:properties和context:property-placeholder用法

    這篇文章主要介紹了spring配置文件中util:properties和context:property-placeholder用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • SpringBoot?MP簡(jiǎn)單的分頁(yè)查詢(xún)測(cè)試實(shí)現(xiàn)步驟分解

    SpringBoot?MP簡(jiǎn)單的分頁(yè)查詢(xún)測(cè)試實(shí)現(xiàn)步驟分解

    好久沒(méi)水后端的東西了,最近在做vue項(xiàng)目寫(xiě)前端的代碼,所以cloud也停進(jìn)度了,吃完飯突然記得我沒(méi)有在博客里寫(xiě)分頁(yè)的東西,雖然項(xiàng)目中用到了,但是沒(méi)有拎出來(lái),這里就拎出來(lái)看看
    2023-04-04
  • Java和C語(yǔ)言分別實(shí)現(xiàn)水仙花數(shù)及拓展代碼

    Java和C語(yǔ)言分別實(shí)現(xiàn)水仙花數(shù)及拓展代碼

    這篇文章主要介紹了分別用Java和C語(yǔ)言實(shí)現(xiàn)水仙花數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-11-11
  • java獲取當(dāng)前日期使用實(shí)例

    java獲取當(dāng)前日期使用實(shí)例

    本文為大家介紹java日期的使用實(shí)例,日期輸出格式為date:2013-12-17,大家參考使用吧
    2014-01-01
  • Log4j日志分類(lèi)和過(guò)濾敏感字段的實(shí)例

    Log4j日志分類(lèi)和過(guò)濾敏感字段的實(shí)例

    這篇文章主要介紹了Log4j日志分類(lèi)和過(guò)濾敏感字段的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12

最新評(píng)論