摘要:監聽模式又名觀察者模式發布訂閱模式源監聽器模式,模式的核心是設計時要區分誰是被觀察者,誰是觀察者。
監聽模式
又名觀察者模式、發布/訂閱模式、源-監聽器(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): self.__observers.append(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): """ 觀察者,當觀察的對象發生變化時,依據變化情況增加處理邏輯 """ def update(self, observable, obj): passUML圖 示例
""" 基于觀察者模式,實現一個簡單的消息隊列,當隊列中有消息時,將消息發送給監聽者 """ 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): self.__resource.append(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")
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/43174.html
摘要:讓你收獲滿滿碼個蛋從年月日推送第篇文章一年過去了已累積推文近篇文章,本文為年度精選,共計篇,按照類別整理便于讀者主題閱讀。本篇文章是今年的最后一篇技術文章,為了讓大家在家也能好好學習,特此花了幾個小時整理了這些文章。 showImg(https://segmentfault.com/img/remote/1460000013241596); 讓你收獲滿滿! 碼個蛋從2017年02月20...
摘要:建造者模式實現建造者模式實現創建抽象建造者類創建具體建造者類。建造者模式使用場景建造者模式使用場景相同的方法,不同的執行順序,產生不同的事件結果時,可以采用建造者模式。1、什么是建造者模式 Separate the construction of a complex object from its representation so that the same constructi...
1、什么是建造者模式Separate the construction of a complex object from its representation so that the same construction process can create different representations.將一個復雜對象的構建與它的表示分離, 使得同樣的構建過程可以創建不同的表示。 說人話:將構...
摘要:觀察者模式維護單一事件對應多個依賴該事件的對象關系發布訂閱維護多個事件主題及依賴各事件主題的對象之間的關系觀察者模式是目標對象直接觸發通知全部通知,觀察對象被迫接收通知。 觀察者模式(Observer) 觀察者模式:定義了對象間一種一對多的依賴關系,當目標對象 Subject 的狀態發生改變時,所有依賴它的對象 Observer 都會得到通知。 簡單點:女神有男朋友了,朋友圈曬個圖,甜...
摘要:作者按每天一個設計模式旨在初步領會設計模式的精髓,目前采用和兩種語言實現。誠然,每種設計模式都有多種實現方式,但此小冊只記錄最直截了當的實現方式原文地址是每天一個設計模式之裝飾者模式歡迎關注個人技術博客。 作者按:《每天一個設計模式》旨在初步領會設計模式的精髓,目前采用javascript和python兩種語言實現。誠然,每種設計模式都有多種實現方式,但此小冊只記錄最直截了當的實現方式...
閱讀 2978·2023-04-26 02:29
閱讀 589·2019-08-30 15:54
閱讀 1665·2019-08-29 13:13
閱讀 605·2019-08-28 17:51
閱讀 2728·2019-08-26 13:58
閱讀 1536·2019-08-26 13:27
閱讀 2825·2019-08-26 11:39
閱讀 3450·2019-08-26 10:46