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