<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      掌握設(shè)計(jì)模式--觀察者模式

      觀察者模式(Observer Pattern)

      觀察者模式(Observer Pattern)是一種行為設(shè)計(jì)模式,它定義了對(duì)象間的一對(duì)多依賴關(guān)系,使得當(dāng)一個(gè)對(duì)象狀態(tài)發(fā)生改變時(shí),所有依賴于它的對(duì)象都會(huì)自動(dòng)收到通知并更新。

      主要組成部分

      主題(Subject):主題是被觀察的對(duì)象,它維護(hù)一個(gè)觀察者列表。當(dāng)它的狀態(tài)發(fā)生改變時(shí),會(huì)通知所有的觀察者。主題提供方法來(lái)注冊(cè)、注銷觀察者。

      觀察者(Observer):觀察者是依賴于主題的對(duì)象,它會(huì)在主題狀態(tài)發(fā)生變化時(shí)收到通知,進(jìn)而更新自身的狀態(tài)。觀察者有一個(gè)更新方法,當(dāng)主題狀態(tài)變化時(shí),主題會(huì)調(diào)用此方法來(lái)通知觀察者。

      工作流程

      1. 注冊(cè)觀察者:觀察者通過(guò)主題提供的注冊(cè)方法將自己注冊(cè)到主題上。
      2. 狀態(tài)變化:主題的狀態(tài)發(fā)生變化時(shí),它會(huì)遍歷其所有注冊(cè)的觀察者。
      3. 通知觀察者:主題調(diào)用每個(gè)觀察者的更新方法,通知它們進(jìn)行狀態(tài)更新。
      4. 更新觀察者:觀察者根據(jù)通知更新自己的狀態(tài),通常會(huì)重新渲染界面或進(jìn)行其他的狀態(tài)更新。

      案例實(shí)現(xiàn)

      假設(shè)有一個(gè)溫度監(jiān)控系統(tǒng):

      • 主題:溫度傳感器,當(dāng)溫度發(fā)生變化時(shí),它會(huì)通知所有依賴于它的觀察者。
      • 觀察者:可以是不同的顯示設(shè)備或報(bào)警系統(tǒng),溫度變化時(shí),它們會(huì)根據(jù)新溫度執(zhí)行相應(yīng)操作。

      案例類圖

      image

      觀察者接口

      用于觀察溫度變化的接口,訂閱的主題發(fā)生變化時(shí),通過(guò)觀察者接口的update方法來(lái)通知訂閱了的所有觀察者。

      interface Observer {
          void update(int temperature);
      }
      

      觀察者實(shí)現(xiàn)類

      // 觀察者實(shí)現(xiàn)類1
      class DisplayDevice implements Observer {
          @Override
          public void update(int temperature) {
              System.out.println("顯示裝置:溫度更新到" + temperature);
          }
      }
      
      // 觀察者實(shí)現(xiàn)類2
      class AlarmSystem implements Observer {
          @Override
          public void update(int temperature) {
              if (temperature > 42) {
                  System.out.println("警報(bào):溫度超過(guò)閾值!");
              }
          }
      }
      

      主題類(被觀察者)

      class TemperatureSensor {
          // 觀察者列表
          private List<Observer> observers = new ArrayList<>();
          private int temperature;
      
          // 注冊(cè)觀察者
          public void addObserver(Observer observer) {
              observers.add(observer);
          }
      
          // 移除觀察者
          public void removeObserver(Observer observer) {
              observers.remove(observer);
          }
      
          // 設(shè)置溫度并通知觀察者
          public void setTemperature(int temperature) {
              this.temperature = temperature;
              notifyObservers();
          }
      
          // 通知所有觀察者
          private void notifyObservers() {
              for (Observer observer : observers) {
                  observer.update(temperature);
              }
          }
      }
      

      測(cè)試客戶端

      public class ObserverPatternDemo {
          public static void main(String[] args) {
              // 創(chuàng)建主題和觀察者
              TemperatureSensor sensor = new TemperatureSensor();
              Observer display = new DisplayDevice();
              Observer alarm = new AlarmSystem();
      
              // 注冊(cè)觀察者:如果沒注冊(cè),那就不會(huì)通知
              sensor.addObserver(display);
              sensor.addObserver(alarm);
      
              // 改變主題的狀態(tài)
              sensor.setTemperature(45);
              sensor.setTemperature(28);
          }
      }
      

      測(cè)試輸出結(jié)果

      顯示裝置:溫度更新到45

      警報(bào):溫度超過(guò)閾值!

      顯示裝置:溫度更新到28

      優(yōu)缺點(diǎn)和使用場(chǎng)景

      優(yōu)點(diǎn)

      1. 松耦合:觀察者與主題之間是松耦合的,主題不需要知道具體的觀察者,觀察者也不需要了解主題的內(nèi)部實(shí)現(xiàn)。
      2. 動(dòng)態(tài)添加或刪除觀察者:可以在運(yùn)行時(shí)動(dòng)態(tài)地添加或刪除觀察者。

      缺點(diǎn)

      1. 多次更新:如果有大量觀察者,狀態(tài)變化可能導(dǎo)致多次調(diào)用更新方法,性能可能受到影響。
      2. 循環(huán)依賴:觀察者之間如果互相通知更新,可能引起循環(huán)依賴或無(wú)限循環(huán)。

      觀察者模式是處理事件驅(qū)動(dòng)系統(tǒng)或需要多個(gè)對(duì)象同步更新狀態(tài)的常用模式,尤其在分布式系統(tǒng)、GUI框架中應(yīng)用廣泛。

      適用場(chǎng)景

      • 事件驅(qū)動(dòng)的系統(tǒng):例如GUI框架(按鈕點(diǎn)擊、界面更新等)、消息通知系統(tǒng)等。
      • 發(fā)布-訂閱系統(tǒng):如消息隊(duì)列系統(tǒng)、新聞?dòng)嗛啞⑸缃幻襟w更新等。
      • 數(shù)據(jù)同步:多個(gè)模塊需要同步更新某些共享數(shù)據(jù)時(shí),如溫度監(jiān)控、股票價(jià)格變化等。

      觀察者模式的應(yīng)用

      Spring的事件機(jī)制ApplicationEvent是事件對(duì)象,ApplicationListener是事件監(jiān)聽器,當(dāng)ApplicationEvent發(fā)布時(shí),所有注冊(cè)了該事件類型的ApplicationListener會(huì)被通知并處理該事件。ApplicationEventPublisher接口(通常是ApplicationContext的實(shí)現(xiàn)類)作為被觀察者,ApplicationListener作為觀察者。事件的發(fā)布和監(jiān)聽實(shí)現(xiàn)了松耦合的通知機(jī)制。

      Java Web中的監(jiān)聽器,它通過(guò)監(jiān)聽和響應(yīng)Web應(yīng)用的生命周期事件、HTTP會(huì)話事件、請(qǐng)求事件以及屬性變化事件。常見的監(jiān)聽器接口包括ServletContextListenerHttpSessionListenerServletRequestListener等,實(shí)現(xiàn)相應(yīng)的監(jiān)聽接口,即可完成相應(yīng)事件的監(jiān)聽。監(jiān)聽器機(jī)制的使用可以幫助開發(fā)者在特定事件發(fā)生時(shí)執(zhí)行一些處理邏輯,保證代碼的解耦和靈活性。

      總結(jié)

      觀察者模式是一種行為設(shè)計(jì)模式,其核心在于通過(guò)定義一對(duì)多的依賴關(guān)系,使得當(dāng)被觀察者的狀態(tài)發(fā)生變化時(shí),所有依賴的觀察者自動(dòng)收到通知并更新,從而實(shí)現(xiàn)對(duì)象之間的松耦合和動(dòng)態(tài)響應(yīng),同時(shí)便于觀察者的擴(kuò)展。

      image

      需要查看往期設(shè)計(jì)模式文章的,可以在個(gè)人主頁(yè)中或者文章開頭的集合中查看,可關(guān)注我,持續(xù)更新中。。。


      超實(shí)用的SpringAOP實(shí)戰(zhàn)之日志記錄

      2023年下半年軟考考試重磅消息

      通過(guò)軟考后卻領(lǐng)取不到實(shí)體證書?

      計(jì)算機(jī)算法設(shè)計(jì)與分析(第5版)

      Java全棧學(xué)習(xí)路線、學(xué)習(xí)資源和面試題一條龍

      軟考證書=職稱證書?

      軟考中級(jí)--軟件設(shè)計(jì)師毫無(wú)保留的備考分享

      posted @ 2025-01-17 09:32  淵渟岳  閱讀(658)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 给我播放片在线观看| 东京热人妻无码一区二区av| 亚洲AVAV天堂AV在线网阿V| 色偷偷亚洲女人天堂观看| 成人精品色一区二区三区| 午夜精品福利亚洲国产| 99久久无码私人网站| 真实国产老熟女无套中出| 精品卡通动漫亚洲AV第一页| 无码人妻精品丰满熟妇区| 国产激情第一区二区三区| 天天躁日日躁狠狠躁2018| 亚洲欧美综合一区二区三区| 国产精品高清一区二区三区| 亚洲天堂网中文在线资源| 特级精品毛片免费观看| 人妻蜜臀久久av不卡| 国产综合久久久久久鬼色| 蜜芽久久人人超碰爱香蕉 | 欧美情侣性视频| 久播影院无码中文字幕| 日韩有码中文字幕一区二区| 99久久精品久久久久久婷婷| 国内自拍偷拍一区二区三区| 潮喷无码正在播放| 亚洲色大成网站www久久九九| 国产精品中文第一字幕| 99RE6在线观看国产精品| 久久精品国产亚洲AV麻| 国产午夜精品一区二区三区不卡| 亚洲国产欧美在线人成aaaa| 亚洲真人无码永久在线| 欧美激情a∨在线视频播放| 男女做aj视频免费的网站| 成人网站网址导航| 亚洲色欲色欲大片www无码| 久久久久亚洲AV色欲av| 3d无码纯肉动漫在线观看| 日韩一欧美内射在线观看| 日本中文一二区有码在线| 宝贝腿开大点我添添公视频免|