> 백엔드 개발 > 파이썬 튜토리얼 > Python 프로그램에서 관찰자 패턴 구조 작성

Python 프로그램에서 관찰자 패턴 구조 작성

高洛峰
풀어 주다: 2017-03-02 16:05:23
원래의
1469명이 탐색했습니다.

관찰자 패턴 정의

는 객체 간의 일대다 종속성을 정의하므로 객체의 상태가 변경되면 모든 종속성이 알림으로 수집되고 자동으로 업데이트되었습니다. 관찰자 패턴은 주체와 관찰자 간의 느슨한 결합을 제공하는 객체 디자인을 제공합니다.
디자인 원칙
대화형 개체 간의 느슨한 결합 디자인을 위해 노력합니다. 느슨하게 결합된 설계를 통해 변화에 대처할 수 있는 유연한 시스템을 구축할 수 있는 이유는 객체 간의 상호의존성이 최소한으로 줄어들기 때문입니다.

모드 구조 및 설명

Python 프로그램에서 관찰자 패턴 구조 작성

1.제목: 주제(타겟) 인터페이스, 주제 등록 및 삭제 가능 이에 관심이 있는 관찰자는 자신의 데이터가 변경될 때 관찰자에게 알릴 수도 있습니다. 피험자는 여러 명의 관찰자를 가질 수 있지만 관찰자의 순서는 중요하지 않습니다. 주체를 "Observable"(Observable)이라고도 합니다
2. 모든 관찰자는 주체 상태가 변경될 때 알림을 받을 수 있도록 Observer 인터페이스를 구현해야 합니다
관찰자 패턴은 널리 사용되며 매우 중요한 디자인입니다. 객체가 높은 수준의 협업을 유지할 수 있도록 하면서 객체 간의 결합을 줄이는 데 도움이 되는 패턴입니다. 이 패턴의 느슨한 결합 특성은 다음과 같습니다.
1. 관찰자에 대한 모든 것, 주체는 관찰자 인터페이스를 구현한다는 것만 알고 있으며, 그 외 다른 것은 아무것도 모릅니다.
2. 언제든지 주체의 관찰자는 다음을 수행할 수 있습니다. 동적으로 추가 및 삭제
3. 새로운 유형의 옵저버가 등장해도 테마 코드를 수정할 필요가 없습니다
4. 주제 또는 옵저버 중 하나를 수정하면 나머지는 영향을 받지 않습니다


댓글을 보면 확실히 알 수 있어요~

#observer pattern 
 
class subject():
  def __init__(self,dat):
    self.listobj = list() #主题中的列表变量用来存储观察者
    self.dat = dat #主题中的数据变化时,需要通知观察者
    
  def registerObject(self,obj):
    self.listobj.append(obj) #实现订阅主题的函数
    
  def removeObject(self,obj):
    pass
  
  def notifyObservers(self):#通知各个观察者数据已经发生变化,观察者相应需要更新自己的数据
    for i in range(len(self.listobj)):
      self.listobj[i].update()
      
  def setdat(self,new_dat):#设置数据
    if self.dat != new_dat:
      self.dat = new_dat
      self.notifyObservers()
 
class observer():#观察者
  def __init__(self,sub): #观察者初始化时,需要订阅主题
    self.sub = sub
    self.sub.registerObject(self)
    self.number = self.sub.dat
    
  def update(self):#观察者更新
    self.number = self.sub.dat
  def display(self):
    print self.number
    
if __name__ =="__main__":
  su = subject(10)
  ob1 = observer(su)
  ob1.display()
  ob2 = observer(su)
  ob2.display()
  su.setdat(11)
  ob1.display()
  ob2.display()
로그인 후 복사


더 많은 Python 프로그램에서 관찰자 패턴 구조 작성과 관련된 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!


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