观察者模式不能在Ruby上工作

观察者模式不能在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 

最后,我添加了一些代码,修改的AAnyClassAAnyClass’s构造函数的代码相同。

class << AAnyClass 
    extend Observable 

    add_observer AnObserver.new 
    changed 
    notify_observers AAnyClass 
end 
AAnyClass 

AAnyClass.new 
AAnyClass.new 

就是这样。

+1

你的代码在解析阶段(当声明类时)调用'notify_observers'一次。模式不能工作/不工作。代码可以。 – mudasobwa

+0

有一些方法可以让我知道“AAnyClass”被称为? '''''''''''''''''''''''''' – rplaurindo

我想你正在使用模块和“扩展”你应该使用类和“包括”的地方。像这样的东西可能是你要找的东西:

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