Python設計模式之觀察者模式原理與用法詳解

2022-10-04 18:18:11 字數 2025 閱讀 3213

觀察者模式(發布-訂閱模式 publish subscribe pattern):定義了一種一對多的關係,讓多個觀察物件同時監聽乙個主題物件,當主題物件狀態發生變化時會通知所有觀察者,rvkicuix是它們能夠自動更新自己

下面是觀察者模式的乙個demo:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

__author__ = 'andy'

"""大話設計模式

設計模式——觀察者模式

觀察者模式又叫做發布-訂閱模式 (publish subscribe pattern):定義了www.cppcns.com一種一對多的關係,讓多個觀察物件同時監聽乙個主題物件,當主題物件狀態發生變化時會通知所有觀察者,是它們能夠自動更新自己

使用場景:當乙個物件的改變需要同時改變其他物件的時候,而且它不知道具體有多少物件待改變

"""#抽象通知者類

class subject(object):

def attach(self, observer):

pass

def detach(self,observer):

pass

def notify(self):

pass

#具體通知者類

class boss(subject):

def __init__(self):

self.observer_list =

self.subject_status = ''

def attach(self, observer):

self.observer_list.append(observer)

def detach(self,owww.cppcns.combserver):

self.observer_list.remove(observer)

def notify(self):

for item in self.observer_list:

item.update()

#抽象觀察者類

class observer(object):

def __init__(self, name, publish):

self.name = name

self.publish = publish

def update(self):

pass

#具體觀察者類-看**的人

class stockobserv程式設計客棧er(observer):

def update(self):

print self.publish.subject_status,self.name,'關閉****,繼續工作'

#具體觀察者類-看nba的人

class nbaobserver(observer):

def update(self):

print self.publish.subject_status,self.name,'關閉nba,繼續工作'

if __name__ == "__main__":

publisher = boss()

stocker = stockobserver('andy',publisher)

nbaer = nbaobserver('tracy',publisher)

publisher.attach(stocker)

publisher.attach(nbaer)

publisher.subject_status = '本老闆回來了'

publisher.notify()

執行結果:

本老闆回來了 andy 關閉****,繼續工作

本老闆回來了 tracy 關閉nba,繼續工作

上面類的設計如下圖:

將乙個系統分割成一系列相互協作的類有乙個很不好的***,那就是需要維護相關物件間的一致性,我們不希望為了維持一致性而使各類緊密耦合,這樣會給維護,擴充套件和重用都帶來不便

觀察者模式所做的工作其實就是在解除耦合,讓耦合的雙方都依賴於抽象而不是依賴於具體,從而使得各自的變化都不影響另一邊的變化

python 設計模式 觀察者 觀察者設計模式

在觀察者設計模式這種模式中,物件被表示為等待事件觸發的觀察者。一旦發生指定的事件,觀察者就會關注該主體。當事件發生時,主體告訴觀察者它已經發生。以下uml圖表示觀察者模式 如何實現觀察者模式?現在讓我們來看看如何實現觀察者模式。參考以下實現 import threading import time ...

Python 設計模式之觀察者模式

觀察者模式之西遊記師徒四人 被觀察者 class imaster object def init self self.prentice list def name self raise notimplementederror 收徒def add prentice self,prentice if i...

python 設計模式之觀察者模式

在現實世界中,許多物件並不是獨立存在的,其中乙個物件的行為發生改變可能會導致乙個或者多個其他物件的行為也發生改變。例如,某種商品的物價 時會導致部分商家高興,而消費者傷心 這樣的例子還有很多,例如小偷與警察,貓和老鼠等 觀察者模式就如乙個聊天室,當你需要收到聊天室的訊息時,你就註冊成為聊天室的成員,...