亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

201652793847941.png (528×276)

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

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

#observer pattern 
 
class subject():
  def __init__(self,dat):
    self.listobj = list() #主題中的列表變量用來存儲(chǔ)觀察者
    self.dat = dat #主題中的數(shù)據(jù)變化時(shí),需要通知觀察者
    
  def registerObject(self,obj):
    self.listobj.append(obj) #實(shí)現(xiàn)訂閱主題的函數(shù)
    
  def removeObject(self,obj):
    pass
  
  def notifyObservers(self):#通知各個(gè)觀察者數(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): #觀察者初始化時(shí),需要訂閱主題
    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é)果不同的原因,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • python3.7添加dlib模塊的方法

    python3.7添加dlib模塊的方法

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

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

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

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

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

    Pytest+Allure使用示例教程

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

    python opencv之SIFT算法示例

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

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

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

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

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

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

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

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

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

最新評(píng)論