日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python设计模式-观察者

發布時間:2025/4/16 python 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python设计模式-观察者 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

定義:

  定義對象間的一種一對多的依賴關系,當一個對象的狀態發生改變時,所有依賴的對象都會得到通知并被自動更新。

  觀察者模式是對象的行為模式,又叫發布-訂閱(pubish/subscribe)模式,模型-視圖(Model/View模式),源-監聽器(Source/Listener)模式或從屬者(Dependents)模式。

角色:

  抽象主題,具體主題(發布者), 抽象觀察者,具體觀察者(訂閱者)

適用場景:

    當一個抽象模型有兩個方面,其中一個方面依賴于另一個方面.將兩者封裝在獨立的對象中以使它們各自獨立的改變和復用

? ? ? ? ? ? ? ?當一個對象的改變需要同時改變其他對象,而且不知道具體有多少對象以待改變

???????????????當一個對象必須通知其他對象,而又不知道其他對象是誰,即這些對象之間是解耦的

優點:

  目標與觀察者之間的耦合最小

缺點:

  多個觀察者之間互不知道對方的存在,因此一個觀察者對主題的修改可能造成錯誤的更新


?

好, 概念說完來實際場景,以我目前公司業務為背景,產品上線后經常會收到用戶反饋bug。那么通常由運營同事收集bug-》開發修復bug-》測試驗證bug-》運維發布新版本到線上

直接上代碼:

class OBperson():'抽象觀察者'def updata(self):passclass TestOB(OBperson):'具體觀察者'def updata(self):print('I am tester, Verification bug')class Devob(OBperson):'具體觀察者'def updata(self):print('i am developing , Fix bug')class Announcerob(OBperson):'具體觀察者'def updata(self):print('i am announcer, release new version')class OBperation():'具體發布者'def __init__(self):self.__observers = []def collect_bug(self):print('Number of bugs collected : ')self.notifyObserver()def addOBserver(self, observer):self.__observers.append(observer)def removeOBserver(self, observer):self.__observers.remove(observer)def notifyObserver(self):for ob in self.__observers:ob.updata()if __name__ == '__main__':p = OBperation()p.addOBserver(Devob())p.addOBserver(TestOB())p.addOBserver(Announcerob())p.collect_bug()

?

運行結果:

?

?設計要點:

  被觀察者至少需要有三個方法:添加監聽者, 移除監聽者, 通知OBserver的方法,觀察者至少要有一個方法:更新方法,更新當前內容,

并作出相應處理

推模型和拉模型:

  觀察者模式根據其側重的功能還可以分為推模型和拉模型。

  推模型:被觀察者對象向觀察者推送主題的詳細信息,不管觀察者是否需要,推送的信息通常是主題對象的全部或部分數據。一般這種模型的實現中,會把被觀察者對象中的全部或部分信息通過 update 的參數傳遞給觀察者 [update(Object obj) ,通過 obj 參數傳遞]。

  拉模型:被觀察者在通知觀察者的時候,只傳遞少量信息。如果觀察者需要更具體的信息,由觀察者主動到被觀察者對象中獲取,相當于是觀察者從被觀察者對象中拉數據。一般這種模型的實現中,會把被觀察者對象自身通過 update 方法傳遞給觀察者 [update(Observable observable ),通過 observable 參數傳遞 ],這樣在觀察者需要獲取數據的時候,就可以通過這個引用來獲取了。

?

轉載于:https://www.cnblogs.com/zztxiaodeng/p/10777331.html

總結

以上是生活随笔為你收集整理的python设计模式-观察者的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。