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

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

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

      什么是觀察者設(shè)計模式?

      什么是觀察者

      觀察者模式的主要角色包括:

      • 主題(Subject): 也稱為被觀察者或可觀察對象。它維護(hù)了一系列觀察者對象,并提供方法用于注冊、刪除和通知觀察者。當(dāng)主題的狀態(tài)發(fā)生改變時,它會通知所有注冊的觀察者。

      • 觀察者(Observer): 觀察主題的對象。觀察者定義了一個更新方法,主題在狀態(tài)改變時會調(diào)用這個方法來通知觀察者。觀察者可以根據(jù)主題的通知來執(zhí)行相應(yīng)的操作。

      觀察者的應(yīng)用

      觀察者模式在實際應(yīng)用中經(jīng)常用于處理事件驅(qū)動的編程場景,如圖形用戶界面(GUI)開發(fā)、消息傳遞系統(tǒng)等。通過觀察者模式,可以實現(xiàn)對象之間的解耦,提高系統(tǒng)的靈活性和可維護(hù)性。
      Spring Framework中,觀察者模式的應(yīng)用非常廣泛,尤其在Spring的事件驅(qū)動機(jī)制中。Spring的事件機(jī)制允許對象在特定事件發(fā)生時發(fā)布事件,并允許其他對象注冊為監(jiān)聽器以接收這些事件。這與觀察者模式的概念非常相似,其中事件源就是觀察者模式中的主題,而事件監(jiān)聽器就是觀察者。

      應(yīng)用程序事件: Spring允許應(yīng)用程序發(fā)布自定義事件,并提供了ApplicationEvent和ApplicationListener接口。應(yīng)用程序可以創(chuàng)建自定義事件類,并在需要時發(fā)布這些事件。其他對象可以實現(xiàn)ApplicationListener接口并注冊為監(jiān)聽器,以接收并處理這些事件。

      Spring MVC事件: 在Spring MVC中,可以使用 ApplicationEventPublisher 接口發(fā)布自定義事件,并通過@EventListener注解或?qū)崿F(xiàn) ApplicationListener 接口的方式來處理這些事件。這使得在MVC架構(gòu)中進(jìn)行解耦和處理事件變得更加容易。

      如何實現(xiàn)

      日常中比較經(jīng)典的實例場景 , 舉個例子,如博客園的文章訂閱, 當(dāng)關(guān)注的作者發(fā)布了新的文章后,關(guān)注其的粉絲就會收到消息通知,這里將代碼拆出來如下。

      import java.util.ArrayList;
      import java.util.List;
      
      // 主題接口
      interface Subject {
          void registerObserver(Observer observer);
          void removeObserver(Observer observer);
          void notifyObservers(String news);
      }
      
      // 觀察者接口
      interface Observer {
          void update(String news);
      }
      
      // 新聞發(fā)布者
      class NewsPublisher implements Subject {
          private List<Observer> observers = new ArrayList<>();
      
          @Override
          public void registerObserver(Observer observer) {
              observers.add(observer);
          }
      
          @Override
          public void removeObserver(Observer observer) {
              observers.remove(observer);
          }
      
          @Override
          public void notifyObservers(String news) {
              for (Observer observer : observers) {
                  observer.update(news);
              }
          }
      
          public void publishNews(String news) {
              System.out.println("發(fā)布新聞: " + news);
              notifyObservers(news);
          }
      }
      
      // 觀察者 - 讀者
      class Reader implements Observer {
          private String name;
      
          public Reader(String name) {
              this.name = name;
          }
      
          @Override
          public void update(String news) {
              System.out.println(name + " 收到新聞: " + news);
          }
      }
      
      public class ObserverPatternExample {
              // 創(chuàng)建新聞發(fā)布者
              NewsPublisher publisher = new NewsPublisher();
      
              // 創(chuàng)建兩個觀察者(讀者)
              Observer reader1 = new Reader("小明");
              Observer reader2 = new Reader("小紅");
      
              // 注冊觀察者
              publisher.registerObserver(reader1);
              publisher.registerObserver(reader2);
      
              // 發(fā)布新聞
              publisher.publishNews("Java 21發(fā)布了!");
              publisher.publishNews("Spring Framework 更新了!");
      
              // 讀者取消訂閱
              publisher.removeObserver(reader2);
      
              // 再次發(fā)布新聞
              publisher.publishNews("小米 su7 上線了,雷總為你開車門,快行動起來吧!");
          }
      }
      
      

      程序運行日志如下

      發(fā)布新聞: Java 21發(fā)布了!
      小明 收到新聞: Java 21發(fā)布了!
      小紅 收到新聞: Java 21發(fā)布了!
      發(fā)布新聞: Spring Framework 更新了!
      小明 收到新聞: Spring Framework 更新了!
      小紅 收到新聞: Spring Framework 更新了!
      發(fā)布新聞: 小米 su7 上線了,雷總為你開車門,快行動起來吧!
      小明 收到新聞: 小米 su7 上線了,雷總為你開車門,快行動起來吧!
      

      結(jié)語

      這里介紹觀察者,是希望從易于理解的概念開始對 Reactive Programing 的理解,在響應(yīng)式編程中多數(shù)基于觀察者模式思想演變而來,如在 Reactor 中,訂閱者(Subscriber)訂閱了數(shù)據(jù)流(Publisher),并在數(shù)據(jù)流中的元素發(fā)生變化時接收通知。

      通知機(jī)制: 在觀察者模式中,主題狀態(tài)的變化會觸發(fā)通知,通知會被發(fā)送給所有注冊的觀察者。在Reactor中,數(shù)據(jù)流中的元素發(fā)生變化時會觸發(fā)通知,通知會被發(fā)送給所有訂閱了該數(shù)據(jù)流的訂閱者。

      事件驅(qū)動編程: 觀察者模式和 Reactor 都支持事件驅(qū)動的編程模型。在觀察者模式中,事件源(主題)發(fā)生事件(狀態(tài)變化),并通知觀察者。在 Reactor 中,事件(數(shù)據(jù)元素)在流中傳遞,并且訂閱者可以對這些事件進(jìn)行響應(yīng)式地處理。

      posted @ 2024-04-17 16:22  怦怦On  閱讀(267)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 一本色道久久88亚洲综合| 婷婷色综合视频在线观看| 国产午夜福利免费入口| 国产在线亚州精品内射| 成人精品国产一区二区网| 九九热视频在线免费观看| 韩国免费a级毛片久久| 久久午夜夜伦鲁鲁片免费无码影院| 中文字幕精品无码一区二区| 欧美成人精品手机在线| 国产成人无码免费视频麻豆| 沐川县| 国产精品自在拍在线播放| 午夜精品福利亚洲国产| 精品久久精品午夜精品久久| 亚洲大尺度无码无码专线| 免费一级黄色好看的国产| 免费看黄色片| 国产精品天干天干综合网| 最新的国产成人精品2022| 国产白嫩护士在线播放| 久久精品无码av| 亚洲无人区码二码三码区| 色吊丝一区二区中文字幕| 男女性高爱潮免费网站| 乐业县| 激情四射激情五月综合网| 久久久久久综合网天天 | 国产AV巨作丝袜秘书| 最近中文字幕国产精选| 国产短视频一区二区三区| 国产中文字幕精品在线| 极品尤物被啪到呻吟喷水| 在线成人国产天堂精品av| 亚洲女同精品久久女同| 日韩东京热一区二区三区| 免费网站看av片| 美女黄18以下禁止观看| 厨房与子乱在线观看| 国产99青青成人A在线| 国产xxxx做受视频|