observer design pattern
Rick Lee
rwklee at home.com
Mon Jan 22 23:33:22 EST 2001
What Design Patterns book are you referring to?
- Rick Lee
Roland Schlenker wrote:
> fray_fernando at my-deja.com wrote:
> >
> > Where can I find some python sample code implementing the observer
> > pattern? O:-)
> > TIA
> >
> > Sent via Deja.com
> > http://www.deja.com/
>
> This is the example in the Design Patterns book for the observer
> pattern written in Python.
>
> # Demonstrate an observer pattern.
>
> 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()
>
> Roland Schlenker
More information about the Python-list
mailing list