Home  >  Article  >  Backend Development  >  Writing observer pattern structure in Python program

Writing observer pattern structure in Python program

高洛峰
高洛峰Original
2017-03-02 16:05:231405browse

Observer pattern definition

defines one-to-many dependencies between objects, so that when an object changes state, all its dependencies will be collected to notifications and automatically updated. The Observer pattern provides an object design that provides loose coupling between subjects and observers.
Design principles
Strive for loose coupling design between interactive objects. The reason why loosely coupled design allows us to build a flexible system that can cope with changes is because the interdependence between objects is reduced to a minimum.

Mode structure and description

Writing observer pattern structure in Python program

1.Subject: Topic (target) interface, topics can be registered and removed Observers who are interested in it can also notify these observers when their own data changes. A subject can have multiple observers, it is important to note that the order of observers should not matter. The subject is also called the "observable" (Observable)
2. All observers must implement the Observer interface so that they can be notified when the subject status changes
The observer pattern is a widely used, very An important design pattern that helps reduce coupling between objects while allowing objects to maintain a high degree of collaboration. The loose coupling characteristics of this pattern are reflected in:
1. Everything about the observer, the subject only knows that it implements the observer interface, and nothing else is known.
2. At any time, the subject's observer can be dynamically Adding and deleting
3. When a new type of observer appears, the code of the topic does not need to be modified
4. Modifying either the topic or the observer will not affect the other party

Example
You can understand it clearly through comments~

#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()


More Python For articles related to writing observer pattern structures in programs, please pay attention to the PHP Chinese website!


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn