この記事では主に Python のオブザーバー モードについて説明します。コードには一定の参考値があります。興味のある友人はそれについて学ぶことができます。お役に立てれば幸いです。
要望: 従業員が職場でこっそり株を見ているので、上司が入ってきたらフロントデスクに知らせて株を見るのをやめてもらうように依頼してください。
ここには 2 種類の人がいて、1 つは観察者、つまり従業員、もう 1 つは通知者、つまりフロントです。従業員はフロントの状況を観察しており、フロントデスクは従業員に最新の状況を通知する責任があります。
#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()
ここでの 2 つのクラス間の結合は非常に大きく、相互依存しています。フォアグラウンド クラスの Notice メソッドが株式オブザーバー クラスの update メソッドを呼び出す一方で、オブザーバー クラスはフォアグラウンド クラスの status 属性にアクセスして最新の動向を取得します。
需要が変化したとき、たとえば、上司が通知者になることができます。株式を監視することに加えて、従業員は NBA も監視します。Boss クラスと NBAObserver クラスが追加されると、これら 4 つのクラスの結合が行われます。は非常に密になります。後のメンテナンスが非常に困難になるため、このような密結合の状況に遭遇した場合は、結合された部分を親クラスに抽象化し、後のメンテナンスがはるかに簡単になるようにする必要があります
#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 中国語 Web サイトの他の関連記事を参照してください。