observer design pattern

Roland Schlenker rol9999 at attglobal.net
Mon Jan 22 16:09:48 EST 2001


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