Observableのコード読んでたらこんな風に使われてた。
module Observable def add_observer(obj) @observers = [] unless defined? @observers @observers << obj end def notify_observers *args @observers.each { |obs| obs.update(self, *args) } end end class Person include Observable attr_accessor :name end class EnglishPrinter def update(person) puts "Hello! My name is #{person.name}." end end class JapanesePrinter def update(person) puts "こんにちは!私の名前は#{person.name}です。" end end person = Person.new person.add_observer(EnglishPrinter.new) person.add_observer(JapanesePrinter.new) person.name = "Tarou" person.notify_observers person.name = "Jirou" person.notify_observers
実行すると
Hello! My name is Tarou. こんにちは!私の名前はTarouです。 Hello! My name is Jirou. こんにちは!私の名前はJirouです。
こんな雰囲気。
なるほどね〜。