需求:员工上班在偷偷看股票,托付前台一旦老板进来,就关照他们,让他们住手看股票。
这里有两类人,一类是视察者,即员工,一类是关照者,即前台,员工在视察前台的状况,前台担任关照员工最新的动态。
#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进修之视察者形式的细致内容,更多请关注ki4网别的相干文章!