观察者模式不能在Ruby上工作
问题描述:
我在下面实现了这个使用Ruby观察者模式的例子。我试图按照this,但没有奏效。观察者模式不能在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
UPDATE
我转换模块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
最后,我添加了一些代码,修改的AAnyClass
与AAnyClass’s
构造函数的代码相同。
class << AAnyClass
extend Observable
add_observer AnObserver.new
changed
notify_observers AAnyClass
end
AAnyClass
AAnyClass.new
AAnyClass.new
就是这样。
答
我想你正在使用模块和“扩展”你应该使用类和“包括”的地方。像这样的东西可能是你要找的东西:
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
+0
我在帖子中添加了更新。但我基于你做了什么。 – rplaurindo
你的代码在解析阶段(当声明类时)调用'notify_observers'一次。模式不能工作/不工作。代码可以。 – mudasobwa
有一些方法可以让我知道“AAnyClass”被称为? '''''''''''''''''''''''''' – rplaurindo