Python設計模式 監聽者模式

2021-10-04 03:47:15 字數 2491 閱讀 4101

監聽模式:在物件之間定義一種一對多的關係,當這個物件發生改變時,所有依賴它的物件都會被通知到。核心就是建立起被觀察者和觀察者之間的一種自動觸發的關係。

監聽者模式是物件的行為模式,又叫發布/訂閱模式、模型/檢視模式、源/***模式或者從屬者模式。

from abc import abcmeta,abstractmethod

class

waterheater

:def

__init__

(self)

: self.__observers=

self.__temperature=

25def

gettemperature

(self)

:return self.__temperature

defsettemperature

(self,temperature)

: self.__temperature = temperature;

print

("當前溫度是:"

,str

(self.__temperature)

+"℃"

) self.__notifies(

)def

addobserver

(self,observer)

:def

__notifies

(self)

:for o in self.__observers:

o.update(self)

class

observer

(metaclass=abcmeta)

: @abstractmethod

defupdate

(self,waterheater)

:pass

class

washing

(observer)

:def

update

(self,waterheater)

:if waterheater.gettemperature(

)>=

50and waterheater.gettemperature(

)<70:

print

("可以洗澡了"

)

class

drink

(observer)

:def

update

(self,waterheater)

:if waterheater.gettemperature(

)>=

100:

print

("水燒開了,可以喝了"

)

def

testwaterheater()

: heater = waterheater(

) wash = washing(

) drink = drink(

) heater.addobserver(wash)

heater.addobserver(drink)

heater.settemperature(50)

heater.settemperature(

100)

testwaterheater(

)

執行結果:

當前溫度是: 50℃

可以洗澡了

當前溫度是: 100℃

水燒開了,可以喝了

通過上面的例子可以提取出監聽者模式的**框架:

from abc import abcmeta,abstractmethod

class

observer

(metaclass=abcmeta)

: @abstractmethod

defupdate

(self,observable,

object):

pass

class

observable

:def

__init__

(self)

: self.__observer =

defaddobserver

(self,observer)

:def

removeobserver

(self,observer)

: self.__observer.remove(observer)

defnotify

(self,

object):

for o in self.__observer:

o.update(

object

)

監聽者有兩種模式:推模型和拉模型

aaa

Python版設計模式之監聽者模式

又名觀察者模式 發布 訂閱模式 源 source listener 模式,模式的核心是 設計時要區分誰是被觀察者,誰是觀察者。被觀察者至少有三個方法,新增觀察者 刪除觀察者 監聽目標變化並通知觀察者 觀察者這至少包含乙個方法,當接收到被觀察者的通知時,做出相應的處理 即在被觀察者的監聽中呼叫 觀察者...

Python版設計模式之監聽者模式

又名觀察者模式 發布 訂閱模式 源 source listener 模式,模式的核心是 設計時要區分誰是被觀察者,誰是觀察者。被觀察者至少有三個方法,新增觀察者 刪除觀察者 監聽目標變化並通知觀察者 觀察者這至少包含乙個方法,當接收到被觀察者的通知時,做出相應的處理 即在被觀察者的監聽中呼叫 觀察者...

Python版設計模式之監聽者模式

又名觀察者模式 發布 訂閱模式 源 source listener 模式,模式的核心是 設計時要區分誰是被觀察者,誰是觀察者。被觀察者至少有三個方法,新增觀察者 刪除觀察者 監聽目標變化並通知觀察者 觀察者這至少包含乙個方法,當接收到被觀察者的通知時,做出相應的處理 即在被觀察者的監聽中呼叫 觀察者...