您好,欢迎访问一九零五行业门户网

Python学习之观察者模式

本篇文章主要讲述了python的观察者模式,代码具有一定参考价值,感兴趣的盆友可以了解一下,希望对你能有所帮助。
需求:员工上班在偷偷看股票,拜托前台一旦老板进来,就通知他们,让他们停止看股票。
这里有两类人,一类是观察者,即员工,一类是通知者,即前台,员工在观察前台的状态,前台负责通知员工最新的动态。
#encoding=utf-8__author__ = 'kevinlu1010@qq.com'class receptionist(): def __init__(self): self.observes=[] self.status='' def attach(self,observe): self.observes.append(observe) def notify(self): for observe in self.observes: observe.update()class stockobserve(): def __init__(self,name,receptionist): self.name=name self.receptionist=receptionist def update(self): print '%s,%s停止看股票'%(self.receptionist.status,self.name)if __name__=='__main__': receptionist=receptionist() observe1=stockobserve('张三',receptionist) observe2=stockobserve('李四',receptionist) receptionist.attach(observe1) receptionist.attach(observe2) receptionist.status='老板来了' receptionist.notify()
这里的两个类的耦合是非常大的,它们是相互依赖的。一方面是前台类的notify方法会调用股票观察者类的update方法,另一方面,观察者类会访问调用前台类的status属性来获取最新的动态。
当需求变动时,例如现在老板也可以是通知者,员工除了看股票,还会看nba,如果增加一个boss类和nbaobserver类,这样这四个类的耦合就会非常紧密,后期维护将非常困难,所以当遇到这种紧耦合的情况时,就需要将它们耦合的部分抽象成一个父类,这样后期维护就会轻松很多
#encoding=utf-8__author__ = 'kevinlu1010@qq.com'from abc import abcmeta, abstractmethodclass subject(): __metaclass__ = abcmeta observers=[] status='' @abstractmethod def attach(self,observer): pass @abstractmethod def detach(self,observer): pass @abstractmethod def notify(self): passclass observer(): __metaclass__ = abcmeta def __init__(self,name,sub): self.name=name self.sub=sub @abstractmethod def update(self): passclass boss(subject): def __init__(self): pass def attach(self,observer): self.observers.append(observer) def detach(self,observer): self.observers.remove(observer) def notify(self): for observer in self.observers: observer.update()class stockobserver(observer): def update(self): print '%s,%s停止看股票'%(self.sub.status,self.name)class nbaobserver(observer): def update(self): print '%s,%s停止看nba'%(self.sub.status,self.name)if __name__=='__main__': boss=boss() observe1=stockobserver('张三',boss) observe2=nbaobserver('李四',boss) boss.attach(observe1) boss.attach(observe2) boss.detach(observe2) boss.status='我是老板,我来了' boss.notify()
相关教程:python视频教程
以上就是python学习之观察者模式的详细内容。
其它类似信息

推荐信息