观察
观察者模式是一种软件设计模式,其中一个对象(称为 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
两次,通知其订阅者,在这种情况下只是一个。
我们添加的订阅者越多,所传播的更改就越多。