이 기사는 주로 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()
여기서 두 클래스 사이의 결합은 매우 크고 상호 의존적입니다. 한편, 전경 클래스의 통지 메소드는 스톡 관찰자 클래스의 업데이트 메소드를 호출하는 반면, 관찰자 클래스는 최신 개발 내용을 얻기 위해 전경 클래스의 상태 속성에 액세스합니다.
예를 들어 수요가 변경되면 이제 상사가 주식 시청 외에도 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 학습 관찰자 모드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!