国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python設計模式之觀察者模式原理與用法詳解

2020-02-16 00:39:47
字體:
來源:轉載
供稿:網友

本文實例講述了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入門與進階經典教程》

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 郁南县| 万荣县| 微博| 云龙县| 盈江县| 凤凰县| 无为县| 多伦县| 南漳县| 仪征市| 烟台市| 宁国市| 集安市| 岳普湖县| 黎平县| 邯郸市| 辉县市| 抚松县| 东阳市| 新干县| 凤庆县| 甘肃省| 香格里拉县| 商都县| 海南省| 澜沧| 桃源县| 铜川市| 措勤县| 清徐县| 隆子县| 龙口市| 新郑市| 大名县| 昌邑市| 丰镇市| 林州市| 宜城市| 宜宾县| 民县| 沈丘县|