本文實例講述了Python設計模式之觀察者模式原理與用法。分享給大家供大家參考,具體如下:
觀察者模式(發布-訂閱模式 Publish Subscribe Pattern):定義了一種一對多的關系,讓多個觀察對象同時監聽一個主題對象,當主題對象狀態發生變化時會通知所有觀察者,是它們能夠自動更新自己
下面是觀察者模式的一個demo:
#!/usr/bin/env python# -*- coding:utf-8 -*-__author__ = 'Andy'"""大話設計模式設計模式——觀察者模式觀察者模式又叫做發布-訂閱模式 (Publish Subscribe Pattern):定義了一種一對多的關系,讓多個觀察對象同時監聽一個主題對象,當主題對象狀態發生變化時會通知所有觀察者,是它們能夠自動更新自己使用場景:當一個對象的改變需要同時改變其他對象的時候,而且它不知道具體有多少對象待改變"""#抽象通知者類class Subject(object): def attach(self, observer): pass def detach(self,observer): pass def notify(self): pass#具體通知者類class Boss(Subject): def __init__(self): self.observer_list = [] self.subject_status = '' def attach(self, observer): self.observer_list.append(observer) def detach(self,observer): self.observer_list.remove(observer) def notify(self): for item in self.observer_list: item.update()#抽象觀察者類class Observer(object): def __init__(self, name, publish): self.name = name self.publish = publish def update(self): pass#具體觀察者類-看股票的人class StockObserver(Observer): def update(self): print self.publish.subject_status,self.name,'關閉股票行情,繼續工作'#具體觀察者類-看NBA的人class NbaObserver(Observer): def update(self): print self.publish.subject_status,self.name,'關閉NBA,繼續工作'if __name__ == "__main__": publisher = Boss() stocker = StockObserver('Andy',publisher) nbaer = NbaObserver('Tracy',publisher) publisher.attach(stocker) publisher.attach(nbaer) publisher.subject_status = '本老板回來了' publisher.notify()運行結果:
本老板回來了 Andy 關閉股票行情,繼續工作
本老板回來了 Tracy 關閉NBA,繼續工作
上面類的設計如下圖:

將一個系統分割成一系列相互協作的類有一個很不好的副作用,那就是需要維護相關對象間的一致性,我們不希望為了維持一致性而使各類緊密耦合,這樣會給維護,擴展和重用都帶來不便
觀察者模式所做的工作其實就是在解除耦合,讓耦合的雙方都依賴于抽象而不是依賴于具體,從而使得各自的變化都不影響另一邊的變化
更多關于Python相關內容可查看本站專題:《Python數據結構與算法教程》、《Python Socket編程技巧總結》、《Python函數使用技巧總結》、《Python字符串操作技巧匯總》及《Python入門與進階經典教程》
新聞熱點
疑難解答