[Python設計模式] 10 - 觀察者模式

設計模式的目的是讓代碼易維護、易擴展,不能為了模式而模式,因此一個簡單的工具腳本是不需要用到任何模式的。

觀察者模式:又叫發布訂閱模式,定義了一種一對多的依賴關系,讓多個觀察者對象同時監聽某一個主題對象,這個主題對象的狀態發生變化時,會通知所有觀察者對象,是他們能自動更新自己。

代碼結構

class Topic(object):
    """主題類。保存所有觀察者實例的引用,每個主題都可以有很多觀察者
    可以增加和刪除觀察者"""
    def __init__(self):
        self.obs = []

    def Attach(self, ob):
        self.obs.append(ob)

    def Detach(self, ob):
        self.obs.remove(ob)

    def Notify(self):
        for ob in self.obs:
            ob.Update()

class Observer(object):
    """抽象觀察者類,收到主題的變更通知時,更新自己"""
    def Update(self):
        raise NotImplementedError()      

class ConcreteTopic(object):
    """一個具體主題"""
    def __init__(self):
        self.state = None

    def ChangeState(self, newState):
        self.state = newState
        self.Notify()

class ConcreteObserver(object):
    """一個具體監聽類"""
    def __init__(self, topic):
        self.topic = topic

    def Update(self):
        print self.topic.state

def client():
    topic = ConcreteTopic()
    topic.Attach(ConcreteObserver(topic))

    topic.ChangeState('New State')

眾多MQ中間件都是采用這種模式的思想來實現的。

觀察者模式可以讓主題和觀察者之間解耦,互相之間盡可能少的依賴。不過抽象主題和抽象觀察者之間還是有耦合的。

原文地址:http://www.isware.cn/python-design-pattern/10-observer/

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 設計模式匯總 一、基礎知識 1. 設計模式概述 定義:設計模式(Design Pattern)是一套被反復使用、多...
    MinoyJet閱讀 3,979評論 1 15
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,973評論 19 139
  • 1 場景問題# 1.1 訂閱報紙的過程## 來考慮實際生活中訂閱報紙的過程,這里簡單總結了一下,訂閱報紙的基本流程...
    七寸知架構閱讀 4,688評論 5 57
  • 設計模式基本原則 開放-封閉原則(OCP),是說軟件實體(類、模塊、函數等等)應該可以拓展,但是不可修改。開-閉原...
    西山薄涼閱讀 3,880評論 3 14
  • 本文的結構如下: 什么是觀察者模式 為什么要用該模式 模式的結構 代碼示例 推模型和拉模型 優點和缺點 適用環境 ...
    w1992wishes閱讀 1,463評論 0 16