<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 對象間的聯動——觀察者模式(六) 22.6 觀察者模式與MVC 在當前流行的MVC(Model-View-Controller)架構中也應用了觀察者模式,MVC是一種架構模式,它包含三個角色:模型(Model),視圖(View)和控制器(Controller)。其中模型可對應于觀察者模式中的觀察目標,而視圖對應于觀察者,控制器可充當兩者之間的中介者。當模型層的數據發生改變時,視圖層將自動改變其顯示內容。如圖22-7所示: ![](http://my.csdn.net/uploads/201207/06/1341505104_3429.jpg) 圖22-7 MVC結構示意圖 在圖22-7中,模型層提供的數據是視圖層所觀察的對象,在視圖層中包含兩個用于顯示數據的圖表對象,一個是柱狀圖,一個是餅狀圖,相同的數據擁有不同的圖表顯示方式,如果模型層的數據發生改變,兩個圖表對象將隨之發生變化,這意味著圖表對象依賴模型層提供的數據對象,因此數據對象的任何狀態改變都應立即通知它們。同時,這兩個圖表之間相互獨立,不存在任何聯系,而且圖表對象的個數沒有任何限制,用戶可以根據需要再增加新的圖表對象,如折線圖。在增加新的圖表對象時,無須修改原有類庫,滿足“開閉原則”。 擴展 > 大家可以查閱相關資料對MVC模式進行深入學習,如Oracle公司提供的技術文檔《Java SE Application Design With MVC》,參考鏈接:http://www.oracle.com/technetwork/articles/javase/index-142890.html。 22.7 觀察者模式總結 觀察者模式是一種使用頻率非常高的設計模式,無論是移動應用、Web應用或者桌面應用,觀察者模式幾乎無處不在,它為實現對象之間的聯動提供了一套完整的解決方案,凡是涉及到一對一或者一對多的對象交互場景都可以使用觀察者模式。觀察者模式廣泛應用于各種編程語言的GUI事件處理的實現,在基于事件的XML解析技術(如SAX2)以及Web事件處理中也都使用了觀察者模式。 1.主要優點 觀察者模式的主要優點如下: (1) 觀察者模式可以實現表示層和數據邏輯層的分離,定義了穩定的消息更新傳遞機制,并抽象了更新接口,使得可以有各種各樣不同的表示層充當具體觀察者角色。 (2) 觀察者模式在觀察目標和觀察者之間建立一個抽象的耦合。觀察目標只需要維持一個抽象觀察者的集合,無須了解其具體觀察者。由于觀察目標和觀察者沒有緊密地耦合在一起,因此它們可以屬于不同的抽象化層次。 (3) 觀察者模式支持廣播通信,觀察目標會向所有已注冊的觀察者對象發送通知,簡化了一對多系統設計的難度。 (4) 觀察者模式滿足“開閉原則”的要求,增加新的具體觀察者無須修改原有系統代碼,在具體觀察者與觀察目標之間不存在關聯關系的情況下,增加新的觀察目標也很方便。 2.主要缺點 觀察者模式的主要缺點如下: (1) 如果一個觀察目標對象有很多直接和間接觀察者,將所有的觀察者都通知到會花費很多時間。 (2) 如果在觀察者和觀察目標之間存在循環依賴,觀察目標會觸發它們之間進行循環調用,可能導致系統崩潰。 (3) 觀察者模式沒有相應的機制讓觀察者知道所觀察的目標對象是怎么發生變化的,而僅僅只是知道觀察目標發生了變化。 3.適用場景 在以下情況下可以考慮使用觀察者模式: (1) 一個抽象模型有兩個方面,其中一個方面依賴于另一個方面,將這兩個方面封裝在獨立的對象中使它們可以各自獨立地改變和復用。 (2) 一個對象的改變將導致一個或多個其他對象也發生改變,而并不知道具體有多少對象將發生改變,也不知道這些對象是誰。 (3) 需要在系統中創建一個觸發鏈,A對象的行為將影響B對象,B對象的行為將影響C對象……,可以使用觀察者模式創建一種鏈式觸發機制。 練習 > Sunny軟件公司欲開發一款實時在線股票軟件,該軟件需提供如下功能:當股票購買者所購買的某支股票價格變化幅度達到5%時,系統將自動發送通知(包括新價格)給購買該股票的所有股民。試使用觀察者模式設計并實現該系統。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看