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

首頁 > 編程 > Python > 正文

Python設計模式之觀察者模式實例

2020-02-23 05:20:52
字體:
來源:轉載
供稿:網友

關于設計模式中的觀察者模式,定義如下(維基百科):

觀察者模式(有時又被稱為發布/訂閱模式)是軟體設計模式的一種。在此種模式中,一個目標物件管理所有相依於它的觀察者物件,並且在它本身的狀態改變時主動發出通知。這通常透過呼叫各觀察者所提供的方法來實現。此種模式通常被用來實作事件處理系統。
簡單來說,一個被觀察者有很多觀察者,被觀察者的狀態的改變會引起所有觀察者的響應操作。

那么我們用Python2.7來實現觀察者模式。


Python中的集合set

集合(set),類似于列表(list),但是它沒有重復的元素,它的doc內容如下:
代碼如下:
>>> print set.__doc__
set() -> new empty set object
set(iterable) -> new set object

Build an unordered collection of unique elements.
下面是在ipython中進行的幾個簡單的集合操作。
代碼如下:
In [1]: myset = set()

In [2]: myset.add(1)

In [3]: myset.add(2)

In [4]: myset.add('s')

In [5]: print myset
set([1, 2, 's'])

In [6]: myset.add('s')

In [7]: print myset
set([1, 2, 's'])

In [8]: myset.remove(3)
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-8-a93073f8a2af> in <module>()
----> 1 myset.remove(3)

KeyError: 3

In [9]: myset.remove(1)

In [10]: print myset
set([2, 's'])
通過內置的set()可以產生一個空的集合對象,也可以在set中傳入一些參數,例如一個列表:
代碼如下:
>>> print set([1,2,3,3])
set([1, 2, 3])
最常用的方法就是add和remove了,更多內容可以參考http://docs.python.org/2/library/stdtypes.html#set。

一個簡單的觀察者模式的實現
代碼如下:
class Observer(object):
    def __init__(self, s):
        self.s = s
    def update(self):
        print self.s

if __name__ == '__main__':
    foo01 = Observer("hi, i am foo01")
    foo02 = Observer("hi, i am foo02")
    observers = set()
    observers.add(foo01)
    observers.add(foo01)
    observers.add(foo02)
    print observers
    for ob in observers:
        ob.update()
下面是運行結果:
代碼如下:
set([<__main__.Observer object at 0xb74627cc>, <__main__.Observer object at 0xb74627ec>])
hi, i am foo01
hi, i am foo02
運行結果中第一行是集合observers的內容,其包含了兩個Observer實例,這些實例所處的內存地址在每次運行時可能有不同。而

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 皮山县| 台安县| 昂仁县| 吴川市| 亚东县| 芷江| 临桂县| 重庆市| 托克逊县| 新化县| 迁西县| 溆浦县| 亳州市| 辽源市| 大同市| 天镇县| 巫溪县| 高安市| 双江| 来宾市| 宁城县| 双辽市| 莲花县| 南皮县| 井研县| 平果县| 高阳县| 土默特左旗| 阳东县| 林西县| 连山| 揭东县| 通辽市| 惠水县| 陆川县| 辽阳县| 婺源县| 宜昌市| 桃源县| 张家口市| 循化|