欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'Andy'
"""
大話設(shè)計(jì)模式
設(shè)計(jì)模式——觀察者模式
觀察者模式又叫做發(fā)布-訂閱模式 (Publish Subscribe Pattern):定義了一種一對(duì)多的關(guān)系,讓多個(gè)觀察對(duì)象同時(shí)監(jiān)聽一個(gè)主題對(duì)象,當(dāng)主題對(duì)象狀態(tài)發(fā)生變化時(shí)會(huì)通知所有觀察者,是它們能夠自動(dòng)更新自己
使用場(chǎng)景:當(dāng)一個(gè)對(duì)象的改變需要同時(shí)改變其他對(duì)象的時(shí)候,而且它不知道具體有多少對(duì)象待改變
"""
#抽象通知者類
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)對(duì)象間的一致性,我們不希望為了維持一致性而使各類緊密耦合,這樣會(huì)給維護(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)典教程

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Python實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu)與算法之快速排序詳解

    Python實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu)與算法之快速排序詳解

    這篇文章主要介紹了Python實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu)與算法之快速排序,詳細(xì)分析了快速排序的原理與Python實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2015-04-04
  • Python散點(diǎn)圖與折線圖繪制過程解析

    Python散點(diǎn)圖與折線圖繪制過程解析

    這篇文章主要介紹了Python散點(diǎn)圖與折線圖繪制過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • python 爬蟲如何實(shí)現(xiàn)百度翻譯

    python 爬蟲如何實(shí)現(xiàn)百度翻譯

    這篇文章主要介紹了python 爬蟲 簡(jiǎn)單實(shí)現(xiàn)百度翻譯的示例,幫助大家更好的理解和使用python 爬蟲,感興趣的朋友可以了解下
    2020-11-11
  • 深入淺析python變量加逗號(hào),的含義

    深入淺析python變量加逗號(hào),的含義

    這篇文章主要介紹了python變量加逗號(hào),的含義,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Pandas DataFrame轉(zhuǎn)換為字典的方法

    Pandas DataFrame轉(zhuǎn)換為字典的方法

    實(shí)際開發(fā)中我們可能會(huì)遇到一類問題,如何將Pandas DataFrame轉(zhuǎn)換為字典,本文就來介紹一下,感興趣的可以了解一下
    2021-05-05
  • Python中UserWarning:The NumPy module was reloaded問題的解決方案

    Python中UserWarning:The NumPy module was 

    在 Python 項(xiàng)目中,我們經(jīng)常需要導(dǎo)入許多庫來完成各種任務(wù),NumPy 作為一個(gè)核心的科學(xué)計(jì)算庫,被廣泛應(yīng)用于數(shù)據(jù)處理和分析,然而,有時(shí)我們會(huì)遇到 NumPy 重載的警告,本文將詳細(xì)講解這一警告的原因,并提供解決方案,需要的朋友可以參考下
    2024-07-07
  • Python3 main函數(shù)使用sys.argv傳入多個(gè)參數(shù)的實(shí)現(xiàn)

    Python3 main函數(shù)使用sys.argv傳入多個(gè)參數(shù)的實(shí)現(xiàn)

    今天小編就為大家分享一篇Python3 main函數(shù)使用sys.argv傳入多個(gè)參數(shù)的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • seek引發(fā)的python文件讀寫的問題及解決

    seek引發(fā)的python文件讀寫的問題及解決

    這篇文章主要介紹了seek引發(fā)的python文件讀寫的問題及解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Django查詢優(yōu)化及ajax編碼格式原理解析

    Django查詢優(yōu)化及ajax編碼格式原理解析

    這篇文章主要介紹了Django查詢優(yōu)化及ajax編碼格式原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Python設(shè)計(jì)模式之工廠方法模式實(shí)例詳解

    Python設(shè)計(jì)模式之工廠方法模式實(shí)例詳解

    這篇文章主要介紹了Python設(shè)計(jì)模式之工廠方法模式,結(jié)合實(shí)例形式較為詳細(xì)的分析了工廠方法模式的概念、原理、用法及相關(guān)操作技巧,需要的朋友可以參考下
    2019-01-01

最新評(píng)論