<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ## 一、觀察者模式定義 觀察者模式定義了一種一對多的依賴關系,讓多個觀察者對象同時監聽某一個主題。這個主題對象在狀態發生變化時,會通知所有的觀察者對象,使他們能夠自動更新自己。 解析:為什么會有觀察者模式? 這里需要注意幾點: 1、**一對多的依賴關系;**并不是說一對一不可用,只是一對一用觀察者模式,沒有必要。 2、**觀察者接收到主題的通知后,自動更新狀態:**觀察者本身都有自己更新自己的方法,需要通知者這個觸發者來觸發,即觀察者在主題達到某個條件后,開始自動更新。 ## 二、看類圖,找要點 ![](https://box.kancloud.cn/2016-02-18_56c5ce72e45a2.png) 從類圖中可以看到圖中有四個類:一個抽象通知者,一個具體通知者,一個抽象觀察者,一個具體觀察者。 具體觀察者用來監聽主題變化,注意圖中沒有主題類,有的是通知者,也就是說,主題通過通知者來通知觀察者變化。 **1、觀察者** 一對多的依賴關系就是指主題跟觀察者之間的關系,繼承自Observer的ConcreteObserver可以有多個。 SO,具體觀察者共有的特點就是:Update方法的參數類型相同,返回值相同。只有這樣的觀察者才可以使用觀察者模式。 **2、通知者** 具體通知者ConcreteSubject是通過實現一個接口Subject來實現通知任務的。既然有接口,很明顯,可以有多個通知者,不同的通知者有各自對應的主題。 **3、觀察者模式中的邏輯判斷**——通知者方法(attach:增加觀察者;detach:移除觀察者) 方法中有增加,又有移除,意味這什么? 我們可以在一個主題中通知中,實現多次**邏輯判斷**執行操作。例如:機房收費系統中的上機操作:在插入上機記錄之前,需要通知三個觀察者:卡號是否存在;卡內余額是否充足;查詢卡狀態;好了,接下來的邏輯判斷是:如果前邊三個條件滿足,則通知以下這兩個觀察者:插入上機記錄,修改卡狀態。有了Attach 和Detach 這兩個方法后,我們可以先添加前三個觀察者,執行完后,判斷結果,然后用Detach 方法把之前的觀察者去掉,再Attach 新的觀察者。去執行各自的操作。 ## 三、實踐 以機房收費系統為例,簡單列出幾個適合用到觀察者模式的有:上機,下機,充值,注冊,結賬前的統計工作。 用圖形化的語言表示如下:(圖中沒有結賬) ![](https://box.kancloud.cn/2016-02-18_56c5ce74ac6a3.png) **既然可以有邏輯判斷,觀察者還可以同時調用觀察者自己的多個方法。** 看結賬觀察者: ![](https://box.kancloud.cn/2016-02-18_56c5ce751cb9a.png) 圖中沒有抽象通知者,我自己給去掉了。為什么有抽象觀察者,是為了降低耦合度才有的,而且像第一種情況那樣,抽象觀察者必須得有,但是結賬這個觀察者模式,我單抽出來,把它的更新方法做成兩個,在系統中,這樣的情況,貌似只有一種,所以我覺得把抽象通知者去掉,反而更簡潔。 PS :這個結賬的主題和觀察者也可以合并到第一種情況中,在這里我只是為了說明 **1、觀察者可以有多個更新自己的方法;** **2、抽象觀察者,在小的系統中,或者只有一個主題的通知者中可以省去;** 而特意拿出來的。 結語:這些只是個人見解,歡迎指正。
                  <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>

                              哎呀哎呀视频在线观看