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

Python設(shè)計(jì)模式之觀察者模式簡單示例

 更新時(shí)間:2018年01月10日 09:55:02   作者:李自泰  
這篇文章主要介紹了Python設(shè)計(jì)模式之觀察者模式,簡單描述了觀察者模式的概念、原理,并結(jié)合實(shí)例形式分析了Python觀察者模式的相關(guān)定義與使用技巧,需要的朋友可以參考下

本文實(shí)例講述了Python設(shè)計(jì)模式之觀察者模式。分享給大家供大家參考,具體如下:

觀察者模式是一個(gè)軟件設(shè)計(jì)模式,一個(gè)主題對象包涵一系列依賴他的觀察者,自動(dòng)通知觀察者的主題對象的改變,通常會(huì)調(diào)用每個(gè)觀察者的一個(gè)方法。這個(gè)設(shè)計(jì)模式非常適用于分布式事件處理系統(tǒng)。

典型的在觀察者模式下:

1.發(fā)布者類應(yīng)該包涵如下方法:

注冊能夠接收通知的對象
從主對象到注冊對象,通知任何變化
未注冊對象不能夠接收任何通知信息

2.訂購者類應(yīng)該包涵如下:

發(fā)布者會(huì)調(diào)用一個(gè)訂購者提供的方法,將任何改變告知注冊對象。

3.當(dāng)一個(gè)事件會(huì)觸發(fā)了狀態(tài)的改變,發(fā)表者會(huì)調(diào)用通知方法

總結(jié):訂閱者可以在發(fā)布對象中注冊或者不注冊,如此無論什么事件發(fā)生,都會(huì)觸發(fā)發(fā)布者通過調(diào)用通知方法,去通知訂購者。這個(gè)通知只會(huì)在事件發(fā)生的時(shí)候,去通知已經(jīng)注冊的訂購者。

一個(gè)簡單的python實(shí)現(xiàn):

讓我們實(shí)現(xiàn)一個(gè)不同用戶在TechForum 上發(fā)布技術(shù)郵件的例子,當(dāng)任何用戶發(fā)布一個(gè)新的郵件,其他用戶就會(huì)接收到新郵件通知。從對象的角度去看,我們應(yīng)該有一個(gè) TechForum對象,我們需要有另外一些需要用戶對象在TechForum上注冊,當(dāng)新郵件通知的時(shí)候,應(yīng)該發(fā)送郵件標(biāo)題。

一個(gè)簡單的例子分析會(huì)聯(lián)想到中介機(jī)構(gòu)和雇主的關(guān)系。這就是招聘者和應(yīng)聘者關(guān)系的延伸。通過一個(gè)工作中介會(huì)發(fā)布不同種類的工作信息,應(yīng)聘者會(huì)去尋找相關(guān)的工作信息,招聘者也會(huì)尋找在中介注冊過的應(yīng)聘者。

代碼如下:

class Publisher:
  def __init__(self):
    pass
  def register(self):
    pass
  def unregister(self):
    pass
  def notifyAll(self):
    pass
class TechForum(Publisher):
  def __init__(self):
    self._listOfUsers = []
    self.postname = None
  def register(self, userObj):
    if userObj not in self._listOfUsers:
      self._listOfUsers.append(userObj)
  def unregister(self, userObj):
    self._listOfUsers.remove(userObj)
  def notifyAll(self):
    for objects in self._listOfUsers:
      objects.notify(self.postname)
  def writeNewPost(self , postname):
    self.postname = postname
    self.notifyAll()
class Subscriber:
  def __init__(self):
    pass
  def notify(self):
    pass
class User1(Subscriber):
  def notify(self, postname):
    print "User1 notified of a new post %s" % postname
class User2(Subscriber):
  def notify(self, postname):
    print "User2 notified of a new post %s" % postname
class SisterSites(Subscriber):
  def __init__(self):
    self._sisterWebsites = ["Site1" , "Site2", "Site3"]
  def notify(self, postname):
    for site in self._sisterWebsites:
        print "Send nofication to site:%s " % site
if __name__ == "__main__":
  techForum = TechForum()
  user1 = User1()
  user2 = User2()
  sites = SisterSites()
  techForum.register(user1)
  techForum.register(user2)
  techForum.register(sites)
  techForum.writeNewPost("Observe Pattern in Python")
  techForum.unregister(user2)
  techForum.writeNewPost("MVC Pattern in Python")

運(yùn)行結(jié)果:

更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進(jìn)階經(jīng)典教程

希望本文所述對大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Pytorch統(tǒng)計(jì)參數(shù)網(wǎng)絡(luò)參數(shù)數(shù)量方式

    Pytorch統(tǒng)計(jì)參數(shù)網(wǎng)絡(luò)參數(shù)數(shù)量方式

    這篇文章主要介紹了Pytorch統(tǒng)計(jì)參數(shù)網(wǎng)絡(luò)參數(shù)數(shù)量方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Python元組的定義及使用

    Python元組的定義及使用

    這篇文章主要介紹了Python元組的定義及使用,在Python中元組是一個(gè)和列表非常類似的數(shù)據(jù)類型,不同之處就是列表中的元素可以修改,而元組之中的元素不可以修改。想具體了解的下小伙伴請參考下面文章的具體內(nèi)容,希望對你有所幫助
    2021-11-11
  • jupyter的安裝與使用以及運(yùn)行卡頓問題及解決

    jupyter的安裝與使用以及運(yùn)行卡頓問題及解決

    這篇文章主要介紹了jupyter的安裝與使用以及運(yùn)行卡頓問題及解決,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • wxpython實(shí)現(xiàn)按鈕切換界面的方法

    wxpython實(shí)現(xiàn)按鈕切換界面的方法

    這篇文章主要為大家詳細(xì)介紹了wxpython實(shí)現(xiàn)按鈕切換界面的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • 詳解Python3中的迭代器和生成器及其區(qū)別

    詳解Python3中的迭代器和生成器及其區(qū)別

    本篇將介紹Python3中的迭代器與生成器,描述可迭代與迭代器關(guān)系,并實(shí)現(xiàn)自定義類的迭代器模式。非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2018-10-10
  • Python實(shí)現(xiàn)合并兩個(gè)有序鏈表的方法示例

    Python實(shí)現(xiàn)合并兩個(gè)有序鏈表的方法示例

    這篇文章主要介紹了Python實(shí)現(xiàn)合并兩個(gè)有序鏈表的方法,涉及Python操作鏈表節(jié)點(diǎn)的遍歷、判斷、添加等相關(guān)操作技巧,需要的朋友可以參考下
    2019-01-01
  • Django model update的多種用法介紹

    Django model update的多種用法介紹

    Django開發(fā)過程中對表(model)的增刪改查是最常用的功能之一,本文介紹筆者在使用model update過程中遇到的那些事
    2019-07-07
  • 詳解python websocket獲取實(shí)時(shí)數(shù)據(jù)的幾種常見鏈接方式

    詳解python websocket獲取實(shí)時(shí)數(shù)據(jù)的幾種常見鏈接方式

    這篇文章主要介紹了詳解python websocket獲取實(shí)時(shí)數(shù)據(jù)的幾種常見鏈接方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Python編寫春聯(lián)的示例代碼(支持行書隸書楷書)

    Python編寫春聯(lián)的示例代碼(支持行書隸書楷書)

    這篇文章主要介紹了如何通過Python代碼編寫春聯(lián),其中春聯(lián)字體支持行書隸書楷書。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以動(dòng)手試一試
    2022-01-01
  • python/Matplotlib繪制復(fù)變函數(shù)圖像教程

    python/Matplotlib繪制復(fù)變函數(shù)圖像教程

    今天小編就為大家分享一篇python/Matplotlib繪制復(fù)變函數(shù)圖像教程,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11

最新評(píng)論