摘要:監(jiān)聽模式又名觀察者模式發(fā)布訂閱模式源監(jiān)聽器模式,模式的核心是設(shè)計時要區(qū)分誰是被觀察者,誰是觀察者。
監(jiān)聽模式
又名觀察者模式、發(fā)布/訂閱模式、源-監(jiān)聽器(Source/Listener)模式,模式的核心是:設(shè)計時要區(qū)分誰是被觀察者,誰是觀察者。被觀察者至少有三個方法,添加觀察者、刪除觀察者、監(jiān)聽目標(biāo)變化并通知觀察者;觀察者這至少包含一個方法,當(dāng)接收到被觀察者的通知時,做出相應(yīng)的處理(即在被觀察者的監(jiān)聽中調(diào)用)。模式框架
""" 觀察者模式 """ class Observable(object): """ 被監(jiān)聽的對象,實(shí)現(xiàn)類需要具體增加被監(jiān)聽的資源 """ 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): """ 觀察者,當(dāng)觀察的對象發(fā)生變化時,依據(jù)變化情況增加處理邏輯 """ def update(self, observable, obj): passUML圖 示例
""" 基于觀察者模式,實(shí)現(xiàn)一個簡單的消息隊(duì)列,當(dāng)隊(duì)列中有消息時,將消息發(fā)送給監(jiān)聽者 """ 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("新消息進(jìn)入,推送...") 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() # 初始化一個隊(duì)列 my_sub_odd = MySubOdd() # 初始化奇數(shù)監(jiān)聽者 my_sub_even = MySubEven() # 初始化偶數(shù)監(jiān)聽者 # 將兩個監(jiān)聽者加入監(jiān)聽隊(duì)列 my_queue.add_observer(my_sub_odd) my_queue.add_observer(my_sub_even) # 添加資源進(jìn)隊(duì)列 my_queue.add_resource("1") my_queue.add_resource("3") my_queue.add_resource("2") my_queue.add_resource("4")
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/43174.html
摘要:讓你收獲滿滿碼個蛋從年月日推送第篇文章一年過去了已累積推文近篇文章,本文為年度精選,共計篇,按照類別整理便于讀者主題閱讀。本篇文章是今年的最后一篇技術(shù)文章,為了讓大家在家也能好好學(xué)習(xí),特此花了幾個小時整理了這些文章。 showImg(https://segmentfault.com/img/remote/1460000013241596); 讓你收獲滿滿! 碼個蛋從2017年02月20...
摘要:建造者模式實(shí)現(xiàn)建造者模式實(shí)現(xiàn)創(chuàng)建抽象建造者類創(chuàng)建具體建造者類。建造者模式使用場景建造者模式使用場景相同的方法,不同的執(zhí)行順序,產(chǎn)生不同的事件結(jié)果時,可以采用建造者模式。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.將一個復(fù)雜對象的構(gòu)建與它的表示分離, 使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。 說人話:將構(gòu)...
摘要:觀察者模式維護(hù)單一事件對應(yīng)多個依賴該事件的對象關(guān)系發(fā)布訂閱維護(hù)多個事件主題及依賴各事件主題的對象之間的關(guān)系觀察者模式是目標(biāo)對象直接觸發(fā)通知全部通知,觀察對象被迫接收通知。 觀察者模式(Observer) 觀察者模式:定義了對象間一種一對多的依賴關(guān)系,當(dāng)目標(biāo)對象 Subject 的狀態(tài)發(fā)生改變時,所有依賴它的對象 Observer 都會得到通知。 簡單點(diǎn):女神有男朋友了,朋友圈曬個圖,甜...
摘要:作者按每天一個設(shè)計模式旨在初步領(lǐng)會設(shè)計模式的精髓,目前采用和兩種語言實(shí)現(xiàn)。誠然,每種設(shè)計模式都有多種實(shí)現(xiàn)方式,但此小冊只記錄最直截了當(dāng)?shù)膶?shí)現(xiàn)方式原文地址是每天一個設(shè)計模式之裝飾者模式歡迎關(guān)注個人技術(shù)博客。 作者按:《每天一個設(shè)計模式》旨在初步領(lǐng)會設(shè)計模式的精髓,目前采用javascript和python兩種語言實(shí)現(xiàn)。誠然,每種設(shè)計模式都有多種實(shí)現(xiàn)方式,但此小冊只記錄最直截了當(dāng)?shù)膶?shí)現(xiàn)方式...
閱讀 3043·2023-04-26 02:29
閱讀 655·2019-08-30 15:54
閱讀 1746·2019-08-29 13:13
閱讀 672·2019-08-28 17:51
閱讀 2795·2019-08-26 13:58
閱讀 1595·2019-08-26 13:27
閱讀 2886·2019-08-26 11:39
閱讀 3511·2019-08-26 10:46