日韩性视频-久久久蜜桃-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设计模式——观察者模式的全部內容,希望文章能夠幫你解決所遇到的問題。

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