# Observerパターン # # Java言語で学ぶデザインパターンと同様の例題をRubyで記述した。 # # coded by Takehiro Kaga # require "thread" require "observer" class RandomNumberGenerator include Observable def execute for i in 0..20 @number = rand(50) changed notify_observers(@number) sleep(1) end end end class DigitObserver def initialize(randomNumberGenerator) @generator = randomNumberGenerator @generator.add_observer(self) end def update(number) puts "DigitObserver: " + number.to_s end end class GraphObserver def initialize(randomNumberGenerator) @generator = randomNumberGenerator @generator.add_observer(self) end def update(number) print "GraphObserver: " for i in 1..number print "*" end puts "" end end # ---- Main ---- # randomNumberGenerator = RandomNumberGenerator.new DigitObserver.new(randomNumberGenerator) GraphObserver.new(randomNumberGenerator) randomNumberGenerator.execute