最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python設計模式之觀察者模式簡單示例

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

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

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

典型的在觀察者模式下:

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

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

2.訂購者類應該包涵如下:

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

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

總結:訂閱者可以在發(fā)布對象中注冊或者不注冊,如此無論什么事件發(fā)生,都會觸發(fā)發(fā)布者通過調用通知方法,去通知訂購者。這個通知只會在事件發(fā)生的時候,去通知已經注冊的訂購者。

一個簡單的python實現(xiàn):

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

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

代碼如下:

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")

運行結果:

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

希望本文所述對大家Python程序設計有所幫助。

相關文章

  • python -v 報錯問題的解決方法

    python -v 報錯問題的解決方法

    在本篇文章里小編給大家整理了關于python -v 報錯問題的解決方法及相關知識點,有興趣的朋友們可以學習下。
    2020-09-09
  • Python簡單計算文件夾大小的方法

    Python簡單計算文件夾大小的方法

    這篇文章主要介紹了Python簡單計算文件夾大小的方法,涉及Python針對目錄的遍歷與文件計算的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • python使用cPickle模塊序列化實例

    python使用cPickle模塊序列化實例

    這篇文章主要介紹了python使用cPickle模塊序列化的方法,是一個非常實用的技巧,需要的朋友可以參考下
    2014-09-09
  • python如何調用字典的key

    python如何調用字典的key

    在本篇文章里小編給大家分享的是關于python調用字典的key方法實例,有興趣點朋友們可以參考學習下。
    2020-05-05
  • Django 刪除upload_to文件的步驟

    Django 刪除upload_to文件的步驟

    這篇文章主要介紹了Django 刪除upload_to文件的步驟,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • 利用Python半自動化生成Nessus報告的方法

    利用Python半自動化生成Nessus報告的方法

    這篇文章主要介紹了利用Python半自動化生成Nessus報告的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • pytorch model.cuda()花費時間很長的解決

    pytorch model.cuda()花費時間很長的解決

    這篇文章主要介紹了pytorch model.cuda()花費時間很長的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 淺談PYTHON 關于文件的操作

    淺談PYTHON 關于文件的操作

    這篇文章主要介紹了PYTHON 關于文件的操作,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • 使用python設置Excel工作表網格線的隱藏與顯示

    使用python設置Excel工作表網格線的隱藏與顯示

    Excel表格界面的直觀性很大程度上得益于表格中的網格線設計,這些線條幫助用戶精確對齊數(shù)據(jù),清晰劃分單元格,本文將介紹如何使用Python設置隱藏或顯示Excel工作表的網格線,實現(xiàn)自動話及批量處理,感興趣的朋友可以參考下
    2024-06-06
  • python 利用文件鎖單例執(zhí)行腳本的方法

    python 利用文件鎖單例執(zhí)行腳本的方法

    今天小編就為大家分享一篇python 利用文件鎖單例執(zhí)行腳本的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02

最新評論

阿克陶县| 邯郸市| 克山县| 江城| 株洲县| 新乡县| 雅江县| 油尖旺区| 北安市| 阿巴嘎旗| 安新县| 保山市| 前郭尔| 历史| 尼木县| 商丘市| 资溪县| 临汾市| 南江县| 太湖县| 通渭县| 丹寨县| 望奎县| 中江县| 黔江区| 太原市| 梓潼县| 高阳县| 卫辉市| 安多县| 肥乡县| 平阴县| 凤冈县| 抚远县| 莱西市| 津市市| 德令哈市| 秭归县| 霍州市| 铜山县| 浙江省|