''' Created on 2013-10-22 @author: Administrator ''' class Subject(object): def __init__(self): self._observers=[] def attach(self,observer): if not observer in self._observers: self._observers.append(observer) def detach(self,observer): try: self._observers.remove(observer) except ValueError: pass def notify(self,modifier=None): for observer in self._observers: if modifier!=observer: observer.update(self) #example usage class Data(Subject): def __init__(self,name=''): Subject.__init__(self) self.name=name self.data=0 @property def data(self): return self._data @data.setter def data(self,value): self._data=value self.notify() class HexViewer: def update(self,subject): print('HexViewer: Subject %s has data 0x%x' % (subject.name, subject.data)) class DecimalViewer: def update(self,subject): print('DecimalViewer: subject %s has data %d' %(subject.name,subject.data)) #example usage def main(): data1=Data('Data 1') data2=Data('Data 2') view1=DecimalViewer() view2=HexViewer() data1.attach(view1) data1.attach(view2) data2.attach(view2) data2.attach(view1) print("Setting Data 1 = 10") data1.data = 10 print("Setting Data 2 = 15") data2.data = 15 print("Setting Data 1 = 3") data1.data = 3 print("Setting Data 2 = 5") data2.data = 5 print("Detach HexViewer from data1 and data2.") data1.detach(view2) data2.detach(view2) print("Setting Data 1 = 10") data1.data = 10 print("Setting Data 2 = 15") data2.data = 15 if __name__ == '__main__': main()
转载于:https://www.cnblogs.com/treeliang/p/3382511.html