RubyのObservable
http://www.ruby-lang.org/ja/man/?cmd=view;name=Observable
ActiveRecordのソース読んでて、Observerパターンのところでinclude Observableとmix-inしててなんじゃこりゃって思ったので調べたら、標準添付ライブラリでこんなんあったのねー。
つーことで結城さんのJava言語で学ぶデザインパターン入門のObserverパターンのサンプルをObservableを使って実装してみた。
#!/usr/bin/env ruby
require 'observer'
class RandomNumberGenerator
include Observable
attr_reader :number
def execute
20.times do
@number = rand 50
self.changed
notify_observers self
end
end
end
class DigitObserver
def update(generator)
puts "DigitObserver:" + generator.number.to_s
end
end
class GraphObserver
def update(generator)
puts "GraphObserver:" + "*" * generator.number
end
end
generator = RandomNumberGenerator.new
generator.add_observer DigitObserver.new
generator.add_observer GraphObserver.new
generator.execute
実行結果
DigitObserver:29
GraphObserver:*****************************
DigitObserver:11
GraphObserver:***********
DigitObserver:3
GraphObserver:***
DigitObserver:28
GraphObserver:****************************
〜続く〜
ウホッ、楽ちん!java.util.ObservableのRuby移植っぽいなぁ。PerlにもClass::Observableなんてものがあるのね。