Skip to content

Instantly share code, notes, and snippets.

@sujayy1983
Created January 17, 2015 18:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sujayy1983/61e30b46822438bcd86a to your computer and use it in GitHub Desktop.
Save sujayy1983/61e30b46822438bcd86a to your computer and use it in GitHub Desktop.
Observer design pattern example. Increase in student record to a database/record is notified to the concerned departments.
"""
@Author Sujayyendhiren Ramarao
@Description Observer Design pattern
"""
import abc
class Subject(object):
""" Subject class that notifies the increase or decrease in student count to all the departments (observers)."""
def __init__(self):
self.studentCount = 0 # Student count in college
self.observers = [] # List of all the observers
def getState(self):
return self.studentCount
def setState(self, incOrDec):
if( incOrDec == True ):
self.studentCount = self.studentCount + 1
else:
self.studentCount = self.studentCount - 1
print("Setting count: " + str(self.studentCount))
self.notifyAllObservers()
def notifyAllObservers(self):
for observer in self.observers:
observer.update()
def attach(self,newObserver):
self.observers.append(newObserver)
class Observer( object ):
""" Abstract class for Observer"""
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def update(self):
return
class ObserverCompSci(Observer):
"""Computer Science department"""
def __init__(self, subject):
self.subject = subject
self.subject.attach(self)
self.totalStudents = 0;
def update(self):
self.totalStudents = self.subject.getState()
print("Computer science department has " + str(self.totalStudents) +" students")
class ObserverAdminDept(Observer):
"""Admin dept."""
def __init__(self, subject):
self.subject = subject
self.subject.attach(self)
self.totalStudents = 0;
def update(self):
self.totalStudents = self.subject.getState()
print("Administrative department has " + str(self.totalStudents) +" students")
if __name__ == "__main__":
subject = Subject()
obsCS = ObserverCompSci(subject)
obsAdn = ObserverAdminDept(subject)
subject.setState( True )
subject.setState( True )
subject.setState( True )
subject.setState( False )
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment