Skip to content

Instantly share code, notes, and snippets.

@monsterxx03
Created July 2, 2012 02:00
Show Gist options
  • Save monsterxx03/3030495 to your computer and use it in GitHub Desktop.
Save monsterxx03/3030495 to your computer and use it in GitHub Desktop.
#!/usr/bin/python
#coding=utf-8
#****************************************************
# Author: XYJ - xyj.asmy@gmail.com
# Last modified: 2012-07-02 09:44
# Filename: observer.py
# Description:
#****************************************************
class Observable(object):
_list = []
changed = False
def add_observer(self, obj):
self._list.append(obj)
def remove_observer(self, index):
return self._list.pop(index)
def remove_all_observers(self):
self._list = []
def set_changed(self):
self.changed = True if self.changed else False
return self.changed
def notify_observers(self, *args, **kwargs):
for obj in self._list:
obj.update(*args, **kwargs)
if __name__ == '__main__':
class Subject(Observable):
def set_price(self, price):
self.set_changed()
self.notify_observers(price)
class Observer(object):
def __init__(self, name):
self.name = name
def update(self, *args, **kwargs):
print "%s the price is %s" % (self.name, args[0])
sub = Subject()
sub.add_observer(Observer(1))
sub.add_observer(Observer('a'))
sub.set_price(10)
sub.remove_observer(1)
sub.set_price(20)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment