# Demonstrate an observer pattern. # Roland Schlenker import time class Observer: def __init__(self): pass def update(self, theChangedSubject): pass class Subject: def __init__(self): self.observerList = [] def attach(self, observer): self.observerList.append(observer) def detach(self, observer): self.observerList.remove(observer) def notify(self): for observer in self.observerList: observer.update(self) class ClockTimer(Subject): def __init__(self): Subject.__init__(self) self.localTime = time.localtime(time.time()) def getHour(self): return self.localTime[3] def getMinute(self): return self.localTime[4] def getSecond(self): return self.localTime[5] def tick(self): while 1: time.sleep(1) self.localTime = time.localtime(time.time()) self.notify() class DigitalClock(Observer): def __init__(self, clocktimer): self.clocktimer = clocktimer self.clocktimer.attach(self) def update(self, theChangedSubject): if theChangedSubject is self.clocktimer: self.draw() def draw(self): print 'The time is %02i:%02i:%02i' % (self.clocktimer.getHour(), self.clocktimer.getMinute(), self.clocktimer.getSecond()) if __name__ == "__main__": timer = ClockTimer() digitalClock = DigitalClock(timer) timer.tick()