這是著名的例子。假設我們生活在乙個70年代的家庭,剛發明了電熱水爐,但由於熱水爐沒有顯示水溫,我們需要有乙個監聽器去監察現在的水溫。
如果只顯示水溫當然沒有難度,但若果這個熱水爐不同溫度時能夠做到不同的功能的話,那麼程式碼就會變得重複而冗長。這時候「監聽模式」就大派用場,大大地縮短了程式碼行數。但我們要如何理解這堆程式碼呢?
class
heatwater
(object):
def__init__
(self)
: self.__observers=
self.__waterheater=
25def
addobserver
(self,observer)
:def
getwatterheater
(self)
:return self.__waterheater
defheater
(self,waterheater)
:print
(waterheater)
self.__waterheater=waterheater
self.notify(
)def
notify
(self)
:for o in self.__observers:
o.update(self)
class
observer
(object):
defupdate
(self,heatheater)
:pass
class
drinkwater
(observer)
:def
update
(self,heatheater):if
(heatheater.getwatterheater(
)>=
100)
:print
("drink"
)class
shower
(observer)
:def
update
(self,heatheater):if
(heatheater.getwatterheater(
)<=
70and heatheater.getwatterheater(
)>=50)
:print
("take shower"
)t=heatwater(
)t.addobserver(drinkwater())
t.addobserver(shower())
t.heater(70)
t.heater(
100)
這個程式碼非常簡單,水溫在50℃~70℃時,會發出警告:可以用來洗澡了!水溫在100℃時也會發出警告:可以用來飲用了!在這裡洗澡模式和飲用模式扮演了監聽的角色,而熱水器則是被監聽的物件。一旦熱水器中的水溫度發生變化,監聽者就能及時知道並做出相應的判斷和動作。這就是程式設計中監聽模式的生動展現。 Python設計模式 監聽者模式
監聽模式 在物件之間定義一種一對多的關係,當這個物件發生改變時,所有依賴它的物件都會被通知到。核心就是建立起被觀察者和觀察者之間的一種自動觸發的關係。監聽者模式是物件的行為模式,又叫發布 訂閱模式 模型 檢視模式 源 模式或者從屬者模式。from abc import abcmeta,abstrac...
Python版設計模式之監聽者模式
又名觀察者模式 發布 訂閱模式 源 source listener 模式,模式的核心是 設計時要區分誰是被觀察者,誰是觀察者。被觀察者至少有三個方法,新增觀察者 刪除觀察者 監聽目標變化並通知觀察者 觀察者這至少包含乙個方法,當接收到被觀察者的通知時,做出相應的處理 即在被觀察者的監聽中呼叫 觀察者...
Python版設計模式之監聽者模式
又名觀察者模式 發布 訂閱模式 源 source listener 模式,模式的核心是 設計時要區分誰是被觀察者,誰是觀察者。被觀察者至少有三個方法,新增觀察者 刪除觀察者 監聽目標變化並通知觀察者 觀察者這至少包含乙個方法,當接收到被觀察者的通知時,做出相應的處理 即在被觀察者的監聽中呼叫 觀察者...