[僕] Observer パターン

僕ト云フ事

たろマークはてなブックマーク

2011年01月26日

[designpattern][python] Observer パターン

今日はここまでー。元ネタは ruby の Observable モジュールを perl + moose で模倣した自分の記事。

ref. [designpattern][moose][perl] perl で Observer パターン

 
# -*- coding: utf-8 -*-
 
import sys
import time
import datetime
 
class Observable():
 
    def __init__(self):
        self.__observers = []
        self.__state     = False
 
    def is_changed (self):
        return self.__state
 
    def changed (self):
        self.__state = True
 
    def notify_observers (self, args):
 
        if not self.is_changed():
            return
 
        self.__state = False
 
        for observer in self.__observers:
            try:
                observer.update(args)
            except Exception, inst:
                print type(inst)
                print inst.args
                print inst
 
    def add_observer(self, obj):
        self.__observers.append(obj)
 
 
class Tick(Observable):
    def start (self):
        while True:
            now = datetime.datetime.now()
 
            self.changed()
            self.notify_observers([now.hour, now.minute, now.second])
 
            time.sleep( 1.0 - (datetime.datetime.now().microsecond / 1000000.0) )
 
 
class TextClock():
    def update(self, time):
        t = "\e[8D%02d:%02d:%02d\n" % tuple(time)
        sys.stdout.write(t)
 
 
if __name__ == '__main__':
    tick = Tick()
    tick.add_observer( TextClock() )
    tick.start()

TextClock で、前に表示したのを削除して新しく表示させるのがうまくいかなかった。このあたりよく分かってないな……。

blog comments powered by Disqus