設計模式 觀察者模式

2021-08-28 09:36:05 字數 2621 閱讀 6705

行為模式的一種,定義的是一種乙個被觀察對多個觀察者的作用關係。當被觀察物件發生變化時, 觀察者需要根據自身的邏輯做出相應的反映。

其基本結構圖如下所示:

在這之中,主要包含三個重要角色:

優缺點

1、可以解除耦合,讓耦合的雙方通過上一級的抽象物件來進行連線,從而保留各自的變換能力。

2、但在級聯響應或者多個觀察者的響應過程中,如果乙個存在卡頓則會影響整個系統的效能。

#!/usr/bin/python

#coding:utf8

'''observer

'''class

subject

(object):

def__init__

(self)

: self._observers =

defattach

(self, observer):if

not observer in self._observers:

defdetach

(self, observer)

:try

: self._observers.remove(observer)

except valueerror:

pass

defnotify

(self, modifier=

none):

for observer in self._observers:

if modifier != observer:

observer.update(self)

# example usage

class

data

(subject)

:def

__init__

(self, name='')

: subject.__init__(self)

self.name = name

self._data =0

@property

defdata

(self)

:return self._data

@data.setter

defdata

(self, value)

: self._data = value

self.notify(

)class

hexviewer

:def

update

(self, subject)

:print

('hexviewer: subject %s has data 0x%x'

%(subject.name, subject.data)

)class

decimalviewer

:def

update

(self, subject)

:print

('decimalviewer: subject %s has data %d'

%(subject.name, subject.data)

)# example usage...

defmain()

: data1 = data(

'data 1'

) data2 = data(

'data 2'

) view1 = decimalviewer(

) view2 = hexviewer(

) data1.attach(view1)

data1.attach(view2)

data2.attach(view2)

data2.attach(view1)

print

("setting data 1 = 10"

) data1.data =

10print

("setting data 2 = 15"

) data2.data =

15print

("setting data 1 = 3"

) data1.data =

3print

("setting data 2 = 5"

) data2.data =

5print

("detach hexviewer from data1 and data2."

) data1.detach(view2)

data2.detach(view2)

print

("setting data 1 = 10"

) data1.data =

10print

("setting data 2 = 15"

) data2.data =

15if __name__ ==

'__main__'

: main(

)

[1] 設計模式(五)觀察者模式

[2] 觀察者模式

[3] 二十三種設計模式及其python實現

python 設計模式 觀察者 觀察者設計模式

在觀察者設計模式這種模式中,物件被表示為等待事件觸發的觀察者。一旦發生指定的事件,觀察者就會關注該主體。當事件發生時,主體告訴觀察者它已經發生。以下uml圖表示觀察者模式 如何實現觀察者模式?現在讓我們來看看如何實現觀察者模式。參考以下實現 import threading import time ...

設計模式 觀察者模式

觀察者模式定義了物件間一對多的依賴關係,乙個物件發生變化時,所有依賴它的物件都得到通知並被自動更新。本文主要闡述觀察者模式在分布式scada人機介面中的使用,利用這種模式使得人機介面顯示效率更高。發布者 郵局 觀察者 參與者 讀者 訂閱者 當郵局收到報社新雜誌的時候,即郵局狀態發生了改變,於是郵局把...

設計模式 觀察者模式

核心思想 註冊 通知 撤銷註冊 observer 將自己註冊到被觀察物件 subject 中,被觀察物件將觀察者存放在乙個容器 container 裡。被觀察物件發生了某種變化 如圖中的somechange 從容器中得到所有註冊過的觀察者,將變化通知觀察者。觀察者告訴被觀察者要撤銷觀察,被觀察者從容...