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

2021-09-12 16:57:46 字數 2243 閱讀 9930

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

觀察者模式

'''class observable(object):

'''被監聽的物件,實現類需要具體增加被監聽的資源

'''def __init__(self):

self.__observers =

@property

def observers(self):

return self.__observers

def has_observer(self):

return false if not self.__observers else true

def add_observer(self, observer):

def remove_observer(self, observer):

self.__observers.remove(observer)

def listener(self, obj=none):

for observer in self.__observers:

observer.update(self, obj)

class observer(object):

'''觀察者,當觀察的物件發生變化時,依據變化情況增加處理邏輯

基於觀察者模式,實現乙個簡單的訊息佇列,當佇列中有訊息時,將訊息傳送給監聽者

'''class myqueue(observable):

def __init__(self):

super().__init__()

self.__resource =

def has_message(self):

return true if self.__resource else false

def queue_size(self):

return len(self.__resource)

def add_resource(self, res):

print("新訊息進入,推送...")

self.listener(obj=res)

class mysubodd(observer):

def update(self, observable, obj):

if isinstance(observable, myqueue) and int(obj) % 2 != 0:

print("i'm mysubodd, get message {} from myqueue.".format(obj))

class mysubeven(observer):

def update(self, observable, obj):

if isinstance(observable, myqueue) and int(obj) % 2 == 0:

print("i'm mysubeven, get message {} from myqueue.".format(obj))

if __name__ == "__main__":

my_queue = myqueue() # 初始化乙個佇列

my_sub_odd = mysubodd() # 初始化奇數監聽者

my_sub_even = mysubeven() # 初始化偶數監聽者

# 將兩個監聽者加入監聽佇列

my_queue.add_observer(my_sub_odd)

my_queue.add_observer(my_sub_even)

# 新增資源進佇列

my_queue.add_resource("1")

my_queue.add_resource("3")

my_queue.add_resource("2")

my_queue.add_resource("4")

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

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

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

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

Python設計模式 監聽者模式

監聽模式 在物件之間定義一種一對多的關係,當這個物件發生改變時,所有依賴它的物件都會被通知到。核心就是建立起被觀察者和觀察者之間的一種自動觸發的關係。監聽者模式是物件的行為模式,又叫發布 訂閱模式 模型 檢視模式 源 模式或者從屬者模式。from abc import abcmeta,abstrac...