最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

Python学习之观察者模式

来源:动视网 责编:小采 时间:2020-11-27 14:20:20
文档

Python学习之观察者模式

Python学习之观察者模式:本篇文章主要讲述了Python的观察者模式,代码具有一定参考价值,感兴趣的盆友可以了解一下,希望对你能有所帮助。需求:员工上班在偷偷看股票,拜托前台一旦老板进来,就通知他们,让他们停止看股票。这里有两类人,一类是观察者,即员工,一类是通知者,即前
推荐度:
导读Python学习之观察者模式:本篇文章主要讲述了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, abstractmethod

class Subject():
 __metaclass__ = ABCMeta
 observers=[]
 status=''
 @abstractmethod
 def attach(self,observer):
 pass
 @abstractmethod
 def detach(self,observer):
 pass
 @abstractmethod
 def notify(self):
 pass

class Observer():
 __metaclass__ = ABCMeta
 def __init__(self,name,sub):
 self.name=name
 self.sub=sub
 @abstractmethod
 def update(self):
 pass

class 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学习之观察者模式

Python学习之观察者模式:本篇文章主要讲述了Python的观察者模式,代码具有一定参考价值,感兴趣的盆友可以了解一下,希望对你能有所帮助。需求:员工上班在偷偷看股票,拜托前台一旦老板进来,就通知他们,让他们停止看股票。这里有两类人,一类是观察者,即员工,一类是通知者,即前
推荐度:
标签: 模式 学习 python
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top