> 백엔드 개발 > 파이썬 튜토리얼 > Python 학습 관찰자 모드

Python 학습 관찰자 모드

little bottle
풀어 주다: 2019-04-28 10:41:10
앞으로
1821명이 탐색했습니다.

이 기사는 주로 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:cnblogs.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿