观察者
观察者模式号称是其他设计模式之母,所以可以看出其地位的重要。观察者模式主要用于定义对象间的一对多关系,当一个对象的状态发生变化时,其他所有对其依赖的对象都将获得通知并自动更新。观察者模式可以演变出许多常见的设计模式,例如生产-消费模式等。
以下给出一个观察者模式的示例。
class Subject:
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)
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 Viewer1:
def update(self, subject):
print("In view 1: {0}".format(subject.data))
class Viewer2:
def update(self, subject):
print("In view 2: {0}".format(subject.data))
def main():
data1 = Data('Data 1')
view1 = Viewer1()
view2 = Viewer2()
data1.attach(view1)
data1.attach(view2)
data1.data = 10
data1.data = 15