Шаблон Observer не работает на Ruby
Я реализовал этот пример ниже для использования шаблона Observer на Ruby. Я пытался следовать этому, но не сработало.
require "observer"
class AAnyClass
extend Observable
changed
notify_observers self
end
module AnObserver
extend self
def update constant
p "Constant #{constant} has been called."
end
def observe constant
constant.add_observer(self)
end
end
AnObserver.observe AAnyClass
# must return "Constant AAnyClass has been called."
AAnyClass
# must return "Constant AAnyClass has been called."
AAnyClass
ОБНОВИТЬ
Я преобразовал модуль AnObserver
в класс, как это:
class AnObserver
def update constant
$stdout.puts "Constant #{constant} has been called."
end
end
И поменять класс AAnyClass
добавив Observable
методы в конструктор и передача AnObserver
экземпляр как параметр метода add_observer
, как это:
class AAnyClass
include Observable
def initialize
add_observer AnObserver.new
changed
notify_observers AAnyClass
end
end
И, наконец, я добавил небольшой код, который изменяет eigenclass
из AAnyClass
с тем же кодом AAnyClass’s
конструктор.
class << AAnyClass
extend Observable
add_observer AnObserver.new
changed
notify_observers AAnyClass
end
AAnyClass
AAnyClass.new
AAnyClass.new
Вот и все.
1 ответ
Я думаю, что вы используете модули и "расширяет", где вы должны использовать классы и "включает". Примерно так может быть то, что вы ищете:
require "observer"
class AAnyClass
include Observable
def run
changed
notify_observers(self)
end
end
class AnObserver
def initialize(ob)
ob.add_observer(self)
end
def update constant
p "Constant #{constant} has been called."
end
def observe constant
constant.add_observer(constant)
end
end
ob = AAnyClass.new
AnObserver.new ob
ob.run