成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Python版設(shè)計(jì)模式之監(jiān)聽(tīng)者模式

hlcfan / 2493人閱讀

摘要:監(jiān)聽(tīng)模式又名觀察者模式發(fā)布訂閱模式源監(jiān)聽(tīng)器模式,模式的核心是設(shè)計(jì)時(shí)要區(qū)分誰(shuí)是被觀察者,誰(shuí)是觀察者。

監(jiān)聽(tīng)模式
又名觀察者模式、發(fā)布/訂閱模式、源-監(jiān)聽(tīng)器(Source/Listener)模式,模式的核心是:設(shè)計(jì)時(shí)要區(qū)分誰(shuí)是被觀察者,誰(shuí)是觀察者。被觀察者至少有三個(gè)方法,添加觀察者、刪除觀察者、監(jiān)聽(tīng)目標(biāo)變化并通知觀察者;觀察者這至少包含一個(gè)方法,當(dāng)接收到被觀察者的通知時(shí),做出相應(yīng)的處理(即在被觀察者的監(jiān)聽(tīng)中調(diào)用)。
模式框架
"""
觀察者模式
"""
class Observable(object):
    """
    被監(jiān)聽(tīng)的對(duì)象,實(shí)現(xiàn)類(lèi)需要具體增加被監(jiān)聽(tīng)的資源
    """
    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)觀察的對(duì)象發(fā)生變化時(shí),依據(jù)變化情況增加處理邏輯
    """
    def update(self, observable, obj):
        pass
UML圖

示例
"""
基于觀察者模式,實(shí)現(xiàn)一個(gè)簡(jiǎn)單的消息隊(duì)列,當(dāng)隊(duì)列中有消息時(shí),將消息發(fā)送給監(jiān)聽(tīng)者
"""
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()        # 初始化一個(gè)隊(duì)列
    my_sub_odd = MySubOdd()     # 初始化奇數(shù)監(jiān)聽(tīng)者
    my_sub_even = MySubEven()   # 初始化偶數(shù)監(jiān)聽(tīng)者

    # 將兩個(gè)監(jiān)聽(tīng)者加入監(jiān)聽(tīng)隊(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)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/43174.html

相關(guān)文章

  • 「碼個(gè)蛋」2017年200篇精選干貨集合

    摘要:讓你收獲滿(mǎn)滿(mǎn)碼個(gè)蛋從年月日推送第篇文章一年過(guò)去了已累積推文近篇文章,本文為年度精選,共計(jì)篇,按照類(lèi)別整理便于讀者主題閱讀。本篇文章是今年的最后一篇技術(shù)文章,為了讓大家在家也能好好學(xué)習(xí),特此花了幾個(gè)小時(shí)整理了這些文章。 showImg(https://segmentfault.com/img/remote/1460000013241596); 讓你收獲滿(mǎn)滿(mǎn)! 碼個(gè)蛋從2017年02月20...

    wangtdgoodluck 評(píng)論0 收藏0
  • Java設(shè)計(jì)模式(三)——建造模式

    摘要:建造者模式實(shí)現(xiàn)建造者模式實(shí)現(xiàn)創(chuàng)建抽象建造者類(lèi)創(chuàng)建具體建造者類(lèi)。建造者模式使用場(chǎng)景建造者模式使用場(chǎng)景相同的方法,不同的執(zhí)行順序,產(chǎn)生不同的事件結(jié)果時(shí),可以采用建造者模式。1、什么是建造者模式 Separate the construction of a complex object from its representation so that the same constructi...

    Forelax 評(píng)論0 收藏0
  • #yyds干貨盤(pán)點(diǎn)#Java設(shè)計(jì)模式(三)——建造模式

    1、什么是建造者模式Separate the construction of a complex object from its representation so that the same construction process can create different representations.將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離, 使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示。 說(shuō)人話:將構(gòu)...

    番茄西紅柿 評(píng)論0 收藏2637
  • JavaScript 設(shè)計(jì)模式(六):觀察模式與發(fā)布訂閱模式

    摘要:觀察者模式維護(hù)單一事件對(duì)應(yīng)多個(gè)依賴(lài)該事件的對(duì)象關(guān)系發(fā)布訂閱維護(hù)多個(gè)事件主題及依賴(lài)各事件主題的對(duì)象之間的關(guān)系觀察者模式是目標(biāo)對(duì)象直接觸發(fā)通知全部通知,觀察對(duì)象被迫接收通知。 觀察者模式(Observer) 觀察者模式:定義了對(duì)象間一種一對(duì)多的依賴(lài)關(guān)系,當(dāng)目標(biāo)對(duì)象 Subject 的狀態(tài)發(fā)生改變時(shí),所有依賴(lài)它的對(duì)象 Observer 都會(huì)得到通知。 簡(jiǎn)單點(diǎn):女神有男朋友了,朋友圈曬個(gè)圖,甜...

    bingo 評(píng)論0 收藏0
  • 每天一個(gè)設(shè)計(jì)模式裝飾模式

    摘要:作者按每天一個(gè)設(shè)計(jì)模式旨在初步領(lǐng)會(huì)設(shè)計(jì)模式的精髓,目前采用和兩種語(yǔ)言實(shí)現(xiàn)。誠(chéng)然,每種設(shè)計(jì)模式都有多種實(shí)現(xiàn)方式,但此小冊(cè)只記錄最直截了當(dāng)?shù)膶?shí)現(xiàn)方式原文地址是每天一個(gè)設(shè)計(jì)模式之裝飾者模式歡迎關(guān)注個(gè)人技術(shù)博客。 作者按:《每天一個(gè)設(shè)計(jì)模式》旨在初步領(lǐng)會(huì)設(shè)計(jì)模式的精髓,目前采用javascript和python兩種語(yǔ)言實(shí)現(xiàn)。誠(chéng)然,每種設(shè)計(jì)模式都有多種實(shí)現(xiàn)方式,但此小冊(cè)只記錄最直截了當(dāng)?shù)膶?shí)現(xiàn)方式...

    brianway 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

hlcfan

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<