Schreiben einer Beobachtermusterstruktur in ein Python-Programm

高洛峰
Freigeben: 2017-03-02 16:05:23
Original
1422 Leute haben es durchsucht

Die Beobachtermusterdefinition

definiert Eins-zu-viele-Abhängigkeiten zwischen Objekten, sodass alle Abhängigkeiten automatisch in Benachrichtigungen erfasst werden, wenn ein Objekt seinen Status ändert aktualisiert. Das Observer-Muster bietet ein Objektdesign, das eine lose Kopplung zwischen Subjekten und Beobachtern ermöglicht.
Designprinzipien
Streben Sie nach einem losen Kopplungsdesign zwischen interaktiven Objekten. Der Grund, warum uns das lose gekoppelte Design den Aufbau eines flexiblen Systems ermöglicht, das mit Änderungen umgehen kann, liegt darin, dass die gegenseitige Abhängigkeit zwischen Objekten auf ein Minimum reduziert wird.

Modusstruktur und Beschreibung

Schreiben einer Beobachtermusterstruktur in ein Python-Programm

1.Betreff: Themen-(Ziel-)Schnittstelle, Themen können registriert und entfernt werden Beobachter, die daran interessiert sind, können diese Beobachter auch benachrichtigen, wenn sich ihre eigenen Daten ändern. Ein Subjekt kann mehrere Beobachter haben, es sollte jedoch beachtet werden, dass die Reihenfolge der Beobachter keine Rolle spielen sollte. Das Subjekt wird auch „observable“ (Observable) genannt
2. Alle Beobachter müssen die Observer-Schnittstelle implementieren, damit sie benachrichtigt werden können, wenn sich der Subjektstatus ändert
Das Beobachtermuster ist ein weit verbreitetes und sehr wichtiges Design Muster, das dazu beiträgt, die Kopplung zwischen Objekten zu reduzieren und gleichzeitig eine hohe Zusammenarbeitsfähigkeit der Objekte aufrechtzuerhalten. Die losen Kopplungseigenschaften dieses Musters spiegeln sich wider in:
1. Alles über den Beobachter, das Subjekt weiß nur, dass es die Beobachterschnittstelle implementiert, und nichts anderes ist bekannt
2. Der Beobachter des Subjekts kann es jederzeit dynamisch sein Hinzufügen und löschen
3. Wenn ein neuer Beobachtertyp erscheint, muss der Themencode nicht geändert werden
4. Ändern Sie entweder das Thema oder den Beobachter, der andere wird nicht beeinflusst

Beispiel
Sie können durch Kommentare klar verstehen~

#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()
Nach dem Login kopieren


Weitere Artikel zum Schreiben von Beobachtermusterstrukturen in mehreren Python-Programmen finden Sie auf der chinesischen PHP-Website!


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage