ホームページ  >  記事  >  バックエンド開発  >  Python 学習オブザーバー モード

Python 学習オブザーバー モード

little bottle
little bottle転載
2019-04-28 10:41:101766ブラウズ

この記事では主に 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 サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。