观察者模式,核心抽象对象管理所有依赖他的其他类,并在设计中使其在发生变动时,主动通知并更新其他类;也叫模型-视图模式、源-收听者模式、从属者模式。
该模式必须包含两个角色:观察者和被观察对象。在刚才的例子中,业务数据是被观察对象,用户界面是观察者。观察者和被观察者之间存在“观察”的逻辑关联,当被观察者发生改变的时候,观察者就会观察到这样的变化,并且做出相应的响应。
我们设计一种应用场景:当客户减少到阀值时,销售通知工厂减少生产、人力资源开始裁人,反之则增加
示例code:
class Observer:
"""观察者核心:销售人员,被观察者number数据"""
def __init__(self):
self._number = None
self._department = []
@property
def number(self):
return self._number
@number.setter
def number(self, value):
self._number = value
print('当前客户数:{}'.format(self._number))
for obj in self._department:
obj.change(value)
print('------------------')
def notice(self, department):
"""相关部门"""
self._department