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

歡迎訪問 生活随笔!

生活随笔

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

python

Python设计模式——观察者模式

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

例子1:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 class?Service: ????def?__init__(self,?service_name,?process_name,?port,?enable_monitor=None): ????????self.service_name?=?service_name ????????self.process_name?=?process_name ????????self.port?=?port ????????self.mon?=?enable_monitor ????????self._process_status?=?True ????????self._port_status?=?True ????@property ????def?process_status(self): ????????return?self._process_status ????@process_status.setter ????def?process_status(self,?status): ????????self._process_status?=?status ????????self.mon.start_mon() ????@property ????def?port_status(self): ????????return?self._port_status ????@port_status.setter ????def?port_status(self,?status): ????????self._port_status?=?status ????????self.mon.start_mon() class?Action: ????@classmethod ????def?send_sms_alarm(cls,?content): ????????print("SMS?Alarm:?{}".format(content)) ????@classmethod ????def?send_email_alarm(cls,?content): ????????print("Email?Alarm:?{}".format(content)) class?Monitor: ????def?__init__(self): ????????self.services?=?[] ????def?add_service(self,?service): ????????self.services.append(service) ????def?start_mon(self): ????????for?ser?in?self.services: ????????????if?not?ser.process_status: ????????????????Action.send_email_alarm("Service:?{0}?Process:?{1}?Status:?{2}".format( ????????????????????ser.service_name,?ser.process_name,?ser.process_status)) ????????????if?not?ser.port_status: ????????????????Action.send_email_alarm("Service:?{0}?Process:?{1}?Status:?{2}".format( ????????????????????ser.service_name,?ser.port,?ser.port_status)) if?__name__?==?'__main__': ????mon?=?Monitor() ????http?=?Service("http",?"httpd",?80,?mon) ????mysql?=?Service("mysql",?"mysqld",?3306,?mon) ????zabbix?=?Service("zabbix",?"zabbixd",?1501,?mon) ????mon.add_service(http) ????mon.add_service(mysql) ????mon.add_service(zabbix) ????#mon.start_mon() ????http.port_status?=?False


例子2:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 #coding:utf-8 #Inventory類描述倉庫對象 class?Inventory: ????def?__init__(self): ????????self.observers?=?[]?#此列表用于存儲觀察者對象 ????????self._product?=?None?#產品 ????????self._quantity?=?0?#數量 ????def?attach(self,?observer):?#此方法用于將觀察者對象添加進列表 ????????self.observers.append(observer) ????@property?#使用property裝飾器修飾,使方法變成屬性 ????def?product(self): ????????return?self._product ????@product.setter?#使用setter修飾product屬性使其可以設置值 ????def?product(self,?value): ????????self._product?=?value ????????self._update_observers()?#只要設置了產品的值,就調用?_update_observers方法 ????@property?#對數量的設置 ????def?quantity(self): ????????return?self._quantity ????@quantity.setter ????def?quantity(self,?value): ????????self._quantity?=?value ????????self._update_observers()?#只要設置了數量的值,就調用?_update_observers方法 ????def?_update_observers(self): ????????for?observer?in?self.observers:?#遍歷觀察者對象 ????????????observer()?#直接用()號調用觀察者對象,之所以可以直接調用,是因為在ConsoleObserver類中實現了__call__方法 #ConsoleObserver類描述觀察者對象 class?ConsoleObserver: ????def?__init__(self,?inventory): ????????self.inventory?=?inventory ????def?__call__(self):?#實現__call__方法后可直接可調用,這里的工作是print了產品和數量信息 ????????print("product:?{0},?quantity:?{1}".format(self.inventory.product,?self.inventory.quantity)) if?__name__?==?'__main__': ????i?=?Inventory()?#創建倉庫對象 ????c?=?ConsoleObserver(i)?#創建一個觀察者對象,并將倉庫對象作為初始化參數 ????i.attach(c)?#將觀察者對象添加到倉庫對象中的observers列表里(兩個對象之間的交互) ????i.product?=?"Widget"?#倉庫對象設置產品名稱(有發生改動) ????i.quantity?=?5?#倉庫對象設置產品數量(有發生改動) ????''' ????工作流分析: ????????1、首先增加了一個產品名稱,因此通知觀察者打印,此時打印出了新添加的產品名稱,數量默認為0 ????????2、之后,又增加了數量5,那么又通知了觀察者,此時打印出了之前添加的產品名稱和這一次新增加的數量5 ????'''


本文轉自 TtrToby 51CTO博客,原文鏈接:http://blog.51cto.com/freshair/2068926

總結

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

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

主站蜘蛛池模板: 国产精品亚洲五月天丁香 | 日本亲与子乱人妻hd | 国产精品久久久久久久久久久久午夜片 | 金瓶狂野欧美性猛交xxxx | 91九色porny视频 | 色无五月 | 国语对白做受69 | 国产喷水视频 | 第一页在线视频 | 精品一区久久 | 性生活视频网站 | 国产精品-色哟哟 | 欧美欧美欧美 | av天天草| 久久h视频 | 岛国av片 | 青青艹av| 国产精品伦子伦免费视频 | 伊人久久亚洲 | 国产自产21区 | 91精品一区二区三区综合在线爱 | 91噜噜噜 | 欧美日韩国语 | 欧美日韩 一区二区三区 | 亚洲中文字幕无码av永久 | 欧洲美女av | 欧美做受高潮中文字幕 | 久久国产小视频 | 日韩在线电影一区二区 | 草莓视频18免费观看 | 成人性生交大全免 | 人人爽人人爽人人爽人人爽 | 少妇高潮一69aⅹ | 裸体喂奶一级裸片 | 蜜臀久久精品久久久用户群体 | 久久久亚洲欧美 | 人妻激情文学 | 色噜噜狠狠一区二区三区果冻 | 日本黄色片网址 | 献给魔王伊伏洛基亚吧动漫在线观看 | 午夜精品久久久久久久久久 | 成人精品动漫 | 亚洲国产一区二区三区a毛片 | 邻家有女4完整版电影观看 欧美偷拍另类 | 高清av一区| 欧美一区自拍 | 国产成人免费在线观看 | 午夜骚影| 国产看黄网站 | 屁屁影院一区二区三区 | 国产香蕉视频在线播放 | 色老头一区二区三区 | 成人黄色在线播放 | 日本精品入口免费视频 | 欧美囗交做爰视频 | 性网址 | 国产精品老熟女视频一区二区 | 日本午夜三级 | 国产精品区在线观看 | 日韩激情在线视频 | 99精品免费视频 | 欧美精品黑人猛交高潮 | 熊出没之冬日乐翻天免费高清观看 | 色免费看| 日韩欧美色 | 美女一区二区三区四区 | 好邻居韩国剧在线观看 | 国产一级理论 | 欧美丰满美乳xxx高潮www | av网址有哪些 | 99久久毛片 | 麻豆视频官网 | 中文字字幕码一二三区 | 精品国产二区三区 | 欧美丰满熟妇xxxxx | 久久精品国产99精品国产亚洲性色 | 免费在线小视频 | 成人做爰视频www | 午夜影院在线 | 国产精品成人在线观看 | 久草一本 | 456亚洲影视| 国产又黄又粗又猛又爽视频 | 综合网激情 | 一二三区在线 | 中文人妻熟女乱又乱精品 | 午夜日韩视频 | 亚洲国产成人精品一区二区三区 | 欧美一级黄色片视频 | 香蕉久久一区二区三区 | 日韩美一级片 | 三级黄在线观看 | 欧美日韩中文字幕一区二区 | 欧美激情在线观看一区 | 免费99精品国产自在在线 | 天堂中文网在线 | 婷婷人体| 亚洲人体av| 精品乱码一区二区三区四区 |