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

Python設(shè)計(jì)模式之觀察者模式原理與用法詳解

 更新時(shí)間:2019年01月16日 08:35:58   作者:Andy冉明  
這篇文章主要介紹了Python設(shè)計(jì)模式之觀察者模式,簡單講述了觀察者模式的概念、原理并結(jié)合實(shí)例形式分析了Python實(shí)現(xiàn)與使用方法,需要的朋友可以參考下

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

觀察者模式(發(fā)布-訂閱模式 Publish Subscribe Pattern):定義了一種一對多的關(guān)系,讓多個(gè)觀察對象同時(shí)監(jiān)聽一個(gè)主題對象,當(dāng)主題對象狀態(tài)發(fā)生變化時(shí)會通知所有觀察者,是它們能夠自動更新自己

下面是觀察者模式的一個(gè)demo:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'Andy'
"""
大話設(shè)計(jì)模式
設(shè)計(jì)模式——觀察者模式
觀察者模式又叫做發(fā)布-訂閱模式 (Publish Subscribe Pattern):定義了一種一對多的關(guān)系,讓多個(gè)觀察對象同時(shí)監(jiān)聽一個(gè)主題對象,當(dāng)主題對象狀態(tài)發(fā)生變化時(shí)會通知所有觀察者,是它們能夠自動更新自己
使用場景:當(dāng)一個(gè)對象的改變需要同時(shí)改變其他對象的時(shí)候,而且它不知道具體有多少對象待改變
"""
#抽象通知者類
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,'關(guān)閉股票行情,繼續(xù)工作'
#具體觀察者類-看NBA的人
class NbaObserver(Observer):
  def update(self):
    print self.publish.subject_status,self.name,'關(guān)閉NBA,繼續(xù)工作'
if __name__ == "__main__":
  publisher = Boss()
  stocker = StockObserver('Andy',publisher)
  nbaer = NbaObserver('Tracy',publisher)
  publisher.attach(stocker)
  publisher.attach(nbaer)
  publisher.subject_status = '本老板回來了'
  publisher.notify()

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

本老板回來了 Andy 關(guān)閉股票行情,繼續(xù)工作
本老板回來了 Tracy 關(guān)閉NBA,繼續(xù)工作

上面類的設(shè)計(jì)如下圖:

將一個(gè)系統(tǒng)分割成一系列相互協(xié)作的類有一個(gè)很不好的副作用,那就是需要維護(hù)相關(guān)對象間的一致性,我們不希望為了維持一致性而使各類緊密耦合,這樣會給維護(hù),擴(kuò)展和重用都帶來不便

觀察者模式所做的工作其實(shí)就是在解除耦合,讓耦合的雙方都依賴于抽象而不是依賴于具體,從而使得各自的變化都不影響另一邊的變化

更多關(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)文章

  • python爬蟲指南之xpath實(shí)例解析(附實(shí)戰(zhàn))

    python爬蟲指南之xpath實(shí)例解析(附實(shí)戰(zhàn))

    在進(jìn)行網(wǎng)頁抓取的時(shí)候,分析定位html節(jié)點(diǎn)是獲取抓取信息的關(guān)鍵,目前我用的是lxml模塊,下面這篇文章主要給大家介紹了關(guān)于python爬蟲指南之xpath實(shí)例解析的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • 基于Python制作簡單的井字棋游戲

    基于Python制作簡單的井字棋游戲

    這篇文章主要為大家詳細(xì)介紹了如何基于Python實(shí)現(xiàn)簡單的井字棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2023-04-04
  • 基于Python開發(fā)一個(gè)文件快速搜索工具

    基于Python開發(fā)一個(gè)文件快速搜索工具

    這篇文章主要為大家詳細(xì)介紹了如何基于Python開發(fā)一個(gè)文件快速搜索工具,可以實(shí)現(xiàn)多條件文件搜索并實(shí)時(shí)搜索狀態(tài)反饋,需要的可以參考一下
    2025-03-03
  • python如何通過pyqt5實(shí)現(xiàn)進(jìn)度條

    python如何通過pyqt5實(shí)現(xiàn)進(jìn)度條

    這篇文章主要介紹了python如何通過pyqt5實(shí)現(xiàn)進(jìn)度條,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Python探索之URL Dispatcher實(shí)例詳解

    Python探索之URL Dispatcher實(shí)例詳解

    這篇文章主要介紹了Python探索之URL Dispatcher實(shí)例詳解,還是比較不錯(cuò)的,這里分享給大家,供需要的朋友參考。
    2017-10-10
  • Python開發(fā)生產(chǎn)環(huán)境常用的4個(gè)工具(實(shí)用推薦)

    Python開發(fā)生產(chǎn)環(huán)境常用的4個(gè)工具(實(shí)用推薦)

    構(gòu)建優(yōu)秀的軟件需要遵循特定的規(guī)則并執(zhí)行行業(yè)標(biāo)準(zhǔn),如何在真實(shí)的生產(chǎn)環(huán)境開發(fā)中體現(xiàn)呢?在這篇文章中,我將向您展示我在Python項(xiàng)目中設(shè)置的4種工具,以簡化開發(fā)工作流程并執(zhí)行一些最佳實(shí)踐,這些工具幫助我提高了效率,節(jié)省了時(shí)間,希望你讀完也能有所收獲
    2024-01-01
  • 使用原生Python編寫Hadoop?MapReduce程序

    使用原生Python編寫Hadoop?MapReduce程序

    在大數(shù)據(jù)處理領(lǐng)域,Hadoop?MapReduce是一個(gè)廣泛使用的框架,用于處理和生成大規(guī)模數(shù)據(jù)集,本文將使用原生Python編寫Hadoop?MapReduce程序,需要的可以參考下
    2025-02-02
  • Python 實(shí)現(xiàn)將numpy中的nan和inf,nan替換成對應(yīng)的均值

    Python 實(shí)現(xiàn)將numpy中的nan和inf,nan替換成對應(yīng)的均值

    這篇文章主要介紹了Python 實(shí)現(xiàn)將numpy中的nan和inf,nan替換成對應(yīng)的均值,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Python猜解網(wǎng)站數(shù)據(jù)庫管理員密碼的腳本

    Python猜解網(wǎng)站數(shù)據(jù)庫管理員密碼的腳本

    這篇文章主要和大家分享一個(gè)Python腳本,可以實(shí)現(xiàn)猜解網(wǎng)站數(shù)據(jù)庫管理員的密碼。文中的示例代碼講解詳細(xì),需要的小伙伴可以參考一下
    2022-02-02
  • Python要如何實(shí)現(xiàn)列表排序的幾種方法

    Python要如何實(shí)現(xiàn)列表排序的幾種方法

    這篇文章主要介紹了Python要如何實(shí)現(xiàn)列表排序的幾種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02

最新評論

行唐县| 周口市| 霍城县| 漳浦县| 广南县| 札达县| 武山县| 黄大仙区| 望城县| 大渡口区| 洛宁县| 紫金县| 静安区| 保德县| 北京市| 防城港市| 岱山县| 丰台区| 泸西县| 托里县| 海伦市| 卢湾区| 浮山县| 郁南县| 博野县| 泽普县| 昂仁县| 册亨县| 漯河市| 西乌| 永顺县| 都安| 赤壁市| 三河市| 神农架林区| 尉犁县| 建宁县| 赤水市| 龙南县| 云安县| 乐业县|