觀察

觀察者模式是一種軟體設計模式,其中一個物件(稱為 subject)維護其依賴項列表(稱為 observers),並通常通過呼叫其中一種方法自動通知它們任何狀態變化。

Ruby 提供了一種實現 Observer 設計模式的簡單機制。模組 Observable 提供邏輯以通知訂戶 Observable 物件中的任何更改。

為了使其工作,observable 必須斷言它已經改變並通知觀察者。

觀察物件必須實現 update() 方法,該方法將是 Observer 的回撥。

讓我們實現一個小聊天,使用者可以訂閱使用者,當其中一個人寫東西時,訂閱者會收到通知。

require "observer"

class Moderator
  include Observable

  def initialize(name)
    @name = name
  end

  def write
    message = "Computer says: No"
    changed
    notify_observers(message)
  end
end

class Warner
  def initialize(moderator, limit)
    @limit = limit
    moderator.add_observer(self)
  end
end

class Subscriber < Warner
  def update(message)
    puts "#{message}"
  end
end

moderator = Moderator.new("Rupert")
Subscriber.new(moderator, 1)
moderator.write
moderator.write

產生以下輸出:

# Computer says: No
# Computer says: No

我們在 Moderator 類中觸發了方法 write 兩次,通知其訂閱者,在這種情況下只是一個。

我們新增的訂閱者越多,所傳播的更改就越多。