观察者模式: 对象间的一对多的依赖关系,当对象发生改变时,所有依赖它的对象都得到通知并自动更新。
模式必须包含两个角色:观察者和被观察对象
class Subject(object):
def __init__(self):
self.obj_server = []
self.__topic = ''
def add_obj(self, obj):
if obj not in self.obj_server:
self.obj_server.append(obj)
def remove(self, obj):
self.obj_server.remove(obj)
@property
def topic(self):
return self.__topic
@topic.setter
def topic(self, topic):
self.__topic = topic
self.notify()
def notify(self):
for obj in self.obj_server:
obj.update(self.topic)
class Ob(object):
def __init__(self, name):
self.name = name
self.topic = None
def update(self, topic):
self.topic = topic
print('{0}更新: {1}'.format(self.name, self.topic))
sub = Subject()
a = Ob('A')
a2 = Ob('A2')
a3 = Ob('A3')
sub.add_obj(a)
sub.add_obj(a2)
sub.add_obj(a3)
sub.topic = 'topic 1'
sub.remove(a2)
sub.topic = 'topic 2'
通过维护一个列表保存依赖对象,当发生改变时,通知每一个对象更新。