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
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()
Weitere Artikel zum Schreiben von Beobachtermusterstrukturen in mehreren Python-Programmen finden Sie auf der chinesischen PHP-Website!