国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python程序中的觀察者模式結構編寫示例

2019-11-25 16:46:42
字體:
來源:轉載
供稿:網友

察者模式定義
定義了對象之間的一對多依賴,這樣一來,當一個對象改變狀態時,它的所有依賴都會收到通知并自動更新。觀察者模式提供了一種對象設計,讓主題和觀察者之間松耦合。
設計原則
為了交互對象之間的松耦合設計而努力。松耦合的設計之所以能讓我們建立有彈性的系統,能夠應對變化,是因為對象之間的互相依賴降到了最低。

模式結構與說明

201652793847941.png (528×276)

1.Subject:主題(目標)接口,主題可以注冊、移除對其感興趣的觀察者,在自身數據發生變化的時候,還可以通知這些觀察者。一個主題可以有多個觀察者,需要注意的是,觀察者的順序應當是無關緊要的。主題也被稱為“被觀察者”(Observable)
2.所有的觀察者必須實現Observer接口,以便主題狀態發生變化時,可以被通知
觀察者模式是一種廣泛使用、非常重要的設計模式,它有利于降低對象間的耦合,同時讓對象保持高度協作。該模式的松耦合特性體現在:
1.關于觀察者的一切,主題只知道它實現了觀察者接口,其它一概不知
2.在任何時候,主題的觀察者可以被動態的添加、刪除
3.當新類型的觀察者出現時,主題的代碼不需要進行修改
4.修改主題或者觀察者的任一方,對方不會受到影響

示例
通過注釋就可以清晰理解~

#observer pattern  class subject():  def __init__(self,dat):    self.listobj = list() #主題中的列表變量用來存儲觀察者    self.dat = dat #主題中的數據變化時,需要通知觀察者      def registerObject(self,obj):    self.listobj.append(obj) #實現訂閱主題的函數      def removeObject(self,obj):    pass    def notifyObservers(self):#通知各個觀察者數據已經發生變化,觀察者相應需要更新自己的數據    for i in range(len(self.listobj)):      self.listobj[i].update()        def setdat(self,new_dat):#設置數據    if self.dat != new_dat:      self.dat = new_dat      self.notifyObservers() class observer():#觀察者  def __init__(self,sub): #觀察者初始化時,需要訂閱主題    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()

   

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鸡东县| 寿阳县| 大同市| 肃南| 灌阳县| 菏泽市| 井陉县| 米脂县| 磐石市| 阿巴嘎旗| 蒙阴县| 祁阳县| 秭归县| 乐安县| 临西县| 万载县| 云阳县| 凤阳县| 久治县| 郧西县| 永登县| 陵川县| 临武县| 黄平县| 张掖市| 南投县| 邮箱| 酉阳| 平凉市| 正安县| 遂平县| 封丘县| 池州市| 贡山| 沁阳市| 辰溪县| 百色市| 宾川县| 西青区| 寿光市| 平塘县|