名字: 观察者模式(Observer)
别名: 别依赖(Dependents)、发布-订阅(Publish-Subscribe)
意图: 定义对象间的一种一对多的依赖关系,当[b]一个对象的状态发生[/b]改变时, 所有[b]依赖于它的对象都将得到通知并自动更新[/b].
动机: 将一个系统分割成一系列相互协作的类有一个常见的副作用,需要维护相关对象间的一致性.我们不希望为了维持一致性而使各类紧密耦合,因为这样降低了他们的可重用性.
[img]http://dl.iteye.com/upload/attachment/172606/eabd1fdd-b3a7-3cc4-8b67-fe164b4a44af.jpg[/img]
别名: 别依赖(Dependents)、发布-订阅(Publish-Subscribe)
意图: 定义对象间的一种一对多的依赖关系,当[b]一个对象的状态发生[/b]改变时, 所有[b]依赖于它的对象都将得到通知并自动更新[/b].
动机: 将一个系统分割成一系列相互协作的类有一个常见的副作用,需要维护相关对象间的一致性.我们不希望为了维持一致性而使各类紧密耦合,因为这样降低了他们的可重用性.
module OberserPattern
def initialize
@observers = []
end
def add_observer(observer)
@observers << observer
end
def delete_observer(observer)
@observers.delete(observer)
end
def notify_observers
@observers.each do |observer|
observer.update(self)
end
end
end
class Informer
include OberserPattern
attr_accessor :name
def initialize(name)
super()
self.name = name
end
def meet
puts "#{name}说: 区安排学习十七大四中会议, 必须参加, 你通知 robin"
notify_observers
end
end
class Person
attr_accessor :name
def initialize(name)
self.name = name
end
def update(informer)
puts "robin, 区安排学习十七大四中会议"
puts "#{informer.name}说我们必须参加, 那我们去报到就回来"
end
end
jin = Informer.new('jin')
zheng = Person.new("Zheng")
jin.add_observer(zheng)
jin.meet
[img]http://dl.iteye.com/upload/attachment/172606/eabd1fdd-b3a7-3cc4-8b67-fe164b4a44af.jpg[/img]