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なんてものがあるのね。