設計模式的目的是讓代碼易維護、易擴展,不能為了模式而模式,因此一個簡單的工具腳本是不需要用到任何模式的。
觀察者模式:又叫發布訂閱模式,定義了一種一對多的依賴關系,讓多個觀察者對象同時監聽某一個主題對象,這個主題對象的狀態發生變化時,會通知所有觀察者對象,是他們能自動更新自己。
代碼結構
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/