欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python程序中的觀察者模式結(jié)構(gòu)編寫示例

 更新時間:2016年05月27日 09:44:37   作者:newbie_evolve  
觀察者模式是最常用的設(shè)計模式之一,旨在觀察目標和觀察者之間建立一個抽象的耦合,減少對象之間的耦合,這里我們就來看一下Python程序中的觀察者模式結(jié)構(gòu)編寫示例

察者模式定義
定義了對象之間的一對多依賴,這樣一來,當一個對象改變狀態(tài)時,它的所有依賴都會收到通知并自動更新。觀察者模式提供了一種對象設(shè)計,讓主題和觀察者之間松耦合。
設(shè)計原則
為了交互對象之間的松耦合設(shè)計而努力。松耦合的設(shè)計之所以能讓我們建立有彈性的系統(tǒng),能夠應(yīng)對變化,是因為對象之間的互相依賴降到了最低。

模式結(jié)構(gòu)與說明

201652793847941.png (528×276)

1.Subject:主題(目標)接口,主題可以注冊、移除對其感興趣的觀察者,在自身數(shù)據(jù)發(fā)生變化的時候,還可以通知這些觀察者。一個主題可以有多個觀察者,需要注意的是,觀察者的順序應(yīng)當是無關(guān)緊要的。主題也被稱為“被觀察者”(Observable)
2.所有的觀察者必須實現(xiàn)Observer接口,以便主題狀態(tài)發(fā)生變化時,可以被通知
觀察者模式是一種廣泛使用、非常重要的設(shè)計模式,它有利于降低對象間的耦合,同時讓對象保持高度協(xié)作。該模式的松耦合特性體現(xiàn)在:
1.關(guān)于觀察者的一切,主題只知道它實現(xiàn)了觀察者接口,其它一概不知
2.在任何時候,主題的觀察者可以被動態(tài)的添加、刪除
3.當新類型的觀察者出現(xiàn)時,主題的代碼不需要進行修改
4.修改主題或者觀察者的任一方,對方不會受到影響

示例
通過注釋就可以清晰理解~

#observer pattern 
 
class subject():
  def __init__(self,dat):
    self.listobj = list() #主題中的列表變量用來存儲觀察者
    self.dat = dat #主題中的數(shù)據(jù)變化時,需要通知觀察者
    
  def registerObject(self,obj):
    self.listobj.append(obj) #實現(xiàn)訂閱主題的函數(shù)
    
  def removeObject(self,obj):
    pass
  
  def notifyObservers(self):#通知各個觀察者數(shù)據(jù)已經(jīng)發(fā)生變化,觀察者相應(yīng)需要更新自己的數(shù)據(jù)
    for i in range(len(self.listobj)):
      self.listobj[i].update()
      
  def setdat(self,new_dat):#設(shè)置數(shù)據(jù)
    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()

   

相關(guān)文章

  • python hash每次調(diào)用結(jié)果不同的原因

    python hash每次調(diào)用結(jié)果不同的原因

    這篇文章主要介紹了python hash每次調(diào)用結(jié)果不同的原因,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • python3.7添加dlib模塊的方法

    python3.7添加dlib模塊的方法

    這篇文章主要介紹了python3.7添加dlib模塊的方法,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • python格式化輸出實例(居中、靠右及靠左對齊)

    python格式化輸出實例(居中、靠右及靠左對齊)

    所謂格式化輸出就是數(shù)據(jù)按照某種特殊的格式和要求進行輸出,下面這篇文章主要給大家介紹了關(guān)于python格式化輸出(居中、靠右及靠左對齊)的相關(guān)資料,文中介紹了format方式、其他擴展寫法以及'%'方式,需要的朋友可以參考下
    2022-04-04
  • 使用Python畫股票的K線圖的方法步驟

    使用Python畫股票的K線圖的方法步驟

    這篇文章主要介紹了使用Python畫股票的K線圖的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Pytest+Allure使用示例教程

    Pytest+Allure使用示例教程

    Allure是開源的免費的自動化測試報告,支持Java,Python,我們來看看如何使用Python pytest與Allure整合,輸出漂亮的測試報告,這篇文章主要介紹了Pytest+Allure使用教程,需要的朋友可以參考下
    2023-12-12
  • python opencv之SIFT算法示例

    python opencv之SIFT算法示例

    這篇文章主要介紹了python opencv之SIFT算法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • Python字符串匹配之6種方法的使用詳解

    Python字符串匹配之6種方法的使用詳解

    這篇文章主要介紹了Python字符串匹配之6種方法的使用詳解,在文末給大家提到了python正則表達的說明,感興趣的朋友跟隨小編一起學(xué)習(xí)吧
    2019-04-04
  • Python中的 is 和 == 以及字符串駐留機制詳解

    Python中的 is 和 == 以及字符串駐留機制詳解

    這篇文章主要介紹了Python中的 is 和 == 以及字符串駐留機制詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-06-06
  • Python2.6版本pip安裝步驟解析

    Python2.6版本pip安裝步驟解析

    這篇文章主要介紹了Python2.6版本pip安裝步驟解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • Python中如何使用if語句處理列表實例代碼

    Python中如何使用if語句處理列表實例代碼

    這篇文章主要給大家介紹了關(guān)于在Python中如何使用if語句處理列表的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02

最新評論