1 module Observable
2 def add_observer(observer)
3 @observers ||= []
4 @observers << observer
5 end
6
7 def notify_observers(*objs)
8 @observers.each do |obs|
9 obs.update(*objs)
10 end
11 end
12 end
13
14 class Tick
15 include Observable
16 def start
17 loop do
18 now = Time.now
19 notify_observers(now.hour, now.min, now.sec)
20 sleep 0.9
21 end
22 end
23 end
24
25 class Clock
26 def update(h, m, s)
27 printf "\e[8D%02d:%02d:%02d", h, m, s
28 STDOUT.flush
29 end
30 end
31 tick = Tick.new
32 tick.add_observer(Clock.new)
33 tick.start
No comments:
Post a Comment