首頁  >  文章  >  後端開發  >  Python程式中的觀察者模式結構編寫

Python程式中的觀察者模式結構編寫

高洛峰
高洛峰原創
2017-03-02 16:05:231403瀏覽

察者模式定義

定義了物件之間的一對多依賴,這樣一來,當一個物件改變狀態時,它的所有依賴都會收到通知並自動更新。觀察者模式提供了一種物件設計,讓主題和觀察者之間鬆散耦合。
設計原則
為了互動物件之間的鬆散耦合設計而努力。松耦合的設計之所以能讓我們建立一個有彈性的系統,能夠應付變化,是因為物件之間的相互依賴降到了最低。

模式結構與說明

Python程式中的觀察者模式結構編寫

#1.Subject:主題(目標)接口,主題可以註冊、移除對其感興趣的觀察者,在自身數據改變的時候,還可以通知這些觀察者。一個主題可以有多個觀察者,需要注意的是,觀察者的順序應該是無關緊要的。主題也被稱為「被觀察者」(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中文網!


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn