觀察
觀察者模式是一種軟體設計模式,其中一個物件(稱為 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
兩次,通知其訂閱者,在這種情況下只是一個。
我們新增的訂閱者越多,所傳播的更改就越多。