Python 的行為型設計模式(七) 觀察者模式

2021-09-23 17:14:53 字數 1479 閱讀 2282

7.1 uml類圖

原理:(1)subject類註冊observer

(2)subject類通知其他物件時,通過修改更新註冊時新增物件的狀態。

(3)observer直接獲取subject修改後的狀態變數,即實現了該狀態變數的輸出

7.2 原始碼實現

class

observer

:def

__init__

(self,observer_name)

: self.observer_name=observer_name

self.observer_state=

0def

update

(self,state)

: self.observer_state = state

print

("更新後觀察者%d的state值為%d"

%(self.observer_name,self.observer_state)

)class

subject

:def

__init__

(self)

: self.subject_state=

0 self.observer_list =

defset_state

(self,subject_state)

: self.subject_state=subject_state

defattach

(self,observer)

:def

detach

(self,observer)

:print

("刪除觀察者%d"

%observer.observer_name)

self.observer_list.remove(observer)

defnotify

(self)

:for observer in self.observer_list:

observer.update(self.subject_state)

if __name__==

'__main__'

: subject = subject(

) observer1 = observer(1)

observer2 = observer(2)

subject.attach(observer1)

subject.attach(observer2)

subject.set_state(10)

subject.notify(

) subject.detach(observer1)

subject.notify(

)

行為型設計模式

職責鏈模式 使用多個物件都有機會處理請求,從而避免請求的傳送者和接受者之間的耦合關係。將這個物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有乙個物件處理它為止。職責鏈模式結構圖 abstarct class handler處理請求 this.gettype name,request 轉移到下一位 cl...

行為型 設計模式

訪問者模式 資料結構相對穩定,對資料操作可變性強,資料結構提供accept方法接收乙個visitor,不同的visitor有不同的訪問此類資料結構的方法,乙個visitor多個資料 beandefinitionvisitor 或多個visitor乙個資料 模板模式 將演算法的基本步驟抽象到父類,子類...

設計模式行為型

一 責任鏈模式 這種模式中,有傳送者和接收者。通常,每個接收者都包含對另乙個接收者的引用,形成一條鏈,如果乙個接收者不能處理該請求,那麼它會把相同的請求傳給下乙個接收者,依次類推。這種模式將請求的傳送者和接收者解耦,但是不能保證請求一定被接收。使用場景是有1.多個物件可以處理同乙個請求,具體哪個物件...