Python程序中的觀察者模式結(jié)構(gòu)編寫示例
察者模式定義
定義了對(duì)象之間的一對(duì)多依賴,這樣一來,當(dāng)一個(gè)對(duì)象改變狀態(tài)時(shí),它的所有依賴都會(huì)收到通知并自動(dòng)更新。觀察者模式提供了一種對(duì)象設(shè)計(jì),讓主題和觀察者之間松耦合。
設(shè)計(jì)原則
為了交互對(duì)象之間的松耦合設(shè)計(jì)而努力。松耦合的設(shè)計(jì)之所以能讓我們建立有彈性的系統(tǒng),能夠應(yīng)對(duì)變化,是因?yàn)閷?duì)象之間的互相依賴降到了最低。
模式結(jié)構(gòu)與說明
1.Subject:主題(目標(biāo))接口,主題可以注冊(cè)、移除對(duì)其感興趣的觀察者,在自身數(shù)據(jù)發(fā)生變化的時(shí)候,還可以通知這些觀察者。一個(gè)主題可以有多個(gè)觀察者,需要注意的是,觀察者的順序應(yīng)當(dāng)是無關(guān)緊要的。主題也被稱為“被觀察者”(Observable)
2.所有的觀察者必須實(shí)現(xiàn)Observer接口,以便主題狀態(tài)發(fā)生變化時(shí),可以被通知
觀察者模式是一種廣泛使用、非常重要的設(shè)計(jì)模式,它有利于降低對(duì)象間的耦合,同時(shí)讓對(duì)象保持高度協(xié)作。該模式的松耦合特性體現(xiàn)在:
1.關(guān)于觀察者的一切,主題只知道它實(shí)現(xiàn)了觀察者接口,其它一概不知
2.在任何時(shí)候,主題的觀察者可以被動(dòng)態(tài)的添加、刪除
3.當(dāng)新類型的觀察者出現(xiàn)時(shí),主題的代碼不需要進(jìn)行修改
4.修改主題或者觀察者的任一方,對(duì)方不會(huì)受到影響
示例
通過注釋就可以清晰理解~
#observer pattern class subject(): def __init__(self,dat): self.listobj = list() #主題中的列表變量用來存儲(chǔ)觀察者 self.dat = dat #主題中的數(shù)據(jù)變化時(shí),需要通知觀察者 def registerObject(self,obj): self.listobj.append(obj) #實(shí)現(xiàn)訂閱主題的函數(shù) def removeObject(self,obj): pass def notifyObservers(self):#通知各個(gè)觀察者數(shù)據(jù)已經(jīng)發(fā)生變化,觀察者相應(yīng)需要更新自己的數(shù)據(jù) for i in range(len(self.listobj)): self.listobj[i].update() def setdat(self,new_dat):#設(shè)置數(shù)據(jù) if self.dat != new_dat: self.dat = new_dat self.notifyObservers() class observer():#觀察者 def __init__(self,sub): #觀察者初始化時(shí),需要訂閱主題 self.sub = sub self.sub.registerObject(self) self.number = self.sub.dat def update(self):#觀察者更新 self.number = self.sub.dat def display(self): print self.number if __name__ =="__main__": su = subject(10) ob1 = observer(su) ob1.display() ob2 = observer(su) ob2.display() su.setdat(11) ob1.display() ob2.display()
相關(guān)文章
python hash每次調(diào)用結(jié)果不同的原因
這篇文章主要介紹了python hash每次調(diào)用結(jié)果不同的原因,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11python格式化輸出實(shí)例(居中、靠右及靠左對(duì)齊)
所謂格式化輸出就是數(shù)據(jù)按照某種特殊的格式和要求進(jìn)行輸出,下面這篇文章主要給大家介紹了關(guān)于python格式化輸出(居中、靠右及靠左對(duì)齊)的相關(guān)資料,文中介紹了format方式、其他擴(kuò)展寫法以及'%'方式,需要的朋友可以參考下2022-04-04Python中的 is 和 == 以及字符串駐留機(jī)制詳解
這篇文章主要介紹了Python中的 is 和 == 以及字符串駐留機(jī)制詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-06-06