<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之旅 廣告
                ## 28.觀察者模式 面向對象編程是根據現實世界建模的。 這里,對象需要彼此通信,其他對象需要在一個對象狀態改變時做出反應。 假設你遇到一種情況,即對象的狀態更改需要傳播到 n 個其他對象,這些其他對象稱為觀察者。 當事情發生變化時,如何編寫整潔的代碼來通知觀察者? 歡迎使用觀察者模式。 看一下 [rator.rb](code/design_patterns/observer.rb) ,代碼清單如下所示 ```rb ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ```rb | ``` # observer.rb class Person attr_accessor :name, :status, :observers def initialize name @name = name @observers =[] end def set_status status @status = status notify_observers end def notify_observers for observer in observers observer.notify self end end def notify person puts "#{person.name}: #{person.status} - notified to #{@name}" end end vel = Person.new "Vel" vel.observers &lt;&lt; Person.new("Murugan") vel.observers &lt;&lt; Person.new("Swami") vel.set_status "Hello All!" ```rb | ``` 在上面的代碼中看看這些行 ```rb vel = Person.new "Vel" vel.observers << Person.new("Murugan") vel.observers << Person.new("Swami") ``` 因此,從上面的代碼中我們知道,有一個名叫 Vel 的人被 Murugan 和 Swami 觀察到。 想象一下一個社交網絡,Vel 之后是 Murugan 和 Swami。 因此,我們在`Person`中有一個稱為`observers`的屬性,它不過是一個可以容納盡可能多觀察者的數組。 如果查看 [Observer.rb](code/design_patterns/observer.rb) ,你會注意到它已在以下幾行中完成 ```rb class Person attr_accessor :name, :status, :observers def initialize name @name = name @observers =[] end ... end ``` 接下來看這條線 ```rb vel.set_status "Hello All!" ``` 在其中,我們設置 Vel 的狀態。 運行程序時,將得到以下輸出: ```rb Vel: Hello All! - notified to Murugan Vel: Hello All! - notified to Swami ``` 因此,你可以看到觀察者已收到有關 Vel 的新狀態的通知。 如何完成的? 如果查看 [viewer.rb](code/design_patterns/observer.rb) ,則在方法`set_status`中我們將調用方法`notify_observers`,在其中發生了魔術。 看看`notify_observers`方法 ```rb class Person ... def notify_observers for observer in observers**(1)** observer.notify self**(2)** end end ... end ``` 在其中發生以下情況 | **1** | 我們遍歷每個觀察者。 | | **2** | 我們在觀察者中調用`notify`方法并傳遞更改后的對象。 | 由于觀察者都是`Person`類型的,所以我們在與`notify`方法相同的類中編寫了代碼,請看下面的代碼。 在里面 ```rb class Person ... def notify person**(1)** puts "#{person.name}: #{person.status} - notified to #{@name}"**(2)** end end ``` | **1** | `notify`接收更改的對象,在這種情況下為`person`。 | | **2** | 它對更改后的對象有作用。 | 這就是觀察者模式的工作方式。 我們有存儲觀察者的方法,有一個通知觀察者的方法,當需要進行通知時會調用該方法,最后我們有一個方法是觀察者來接收更改的對象。 觀察者可以對更改后的對象執行其希望的操作。 | | 實際上,當你使用 Ruby 時,觀察者模式會直接放入其標準庫中。 看看這個 https://ruby-doc.org/stdlib-2.7.0/libdoc/observer/rdoc/Observable.html |
                  <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>

                              哎呀哎呀视频在线观看