鍍金池/ 教程/ Python/ 觀(guān)察者設(shè)計(jì)模式
反模式
隊(duì)列
適配器設(shè)計(jì)模式
享元設(shè)計(jì)模式
Python設(shè)計(jì)模式
工廠(chǎng)模式
模板設(shè)計(jì)模式
構(gòu)建器(Builder)設(shè)計(jì)模式
Python設(shè)計(jì)模式概要
命令設(shè)計(jì)模式
Python設(shè)計(jì)模式簡(jiǎn)介
觀(guān)察者設(shè)計(jì)模式
代理設(shè)計(jì)模式
異常處理
責(zé)任鏈設(shè)計(jì)模式
字典實(shí)現(xiàn)
抽象工廠(chǎng)設(shè)計(jì)模式
Python并發(fā)(多線(xiàn)程)
策略設(shè)計(jì)模式
門(mén)面(Facade)設(shè)計(jì)模式
原型設(shè)計(jì)模式
迭代器設(shè)計(jì)模式
集合
單例模式
列表數(shù)據(jù)結(jié)構(gòu)
狀態(tài)設(shè)計(jì)模式
模型視圖控制器(MVC)模式
裝飾器設(shè)計(jì)模式
面向?qū)ο蟾拍畹膶?shí)現(xiàn)
面向?qū)ο笤O(shè)計(jì)模式
字符串和序列化

觀(guān)察者設(shè)計(jì)模式

在觀(guān)察者設(shè)計(jì)模式這種模式中,對(duì)象被表示為等待事件觸發(fā)的觀(guān)察者。 一旦發(fā)生指定的事件,觀(guān)察者就會(huì)關(guān)注該主體。 當(dāng)事件發(fā)生時(shí),主體告訴觀(guān)察者它已經(jīng)發(fā)生。

以下UML圖表示觀(guān)察者模式 -

如何實(shí)現(xiàn)觀(guān)察者模式?

現(xiàn)在讓我們來(lái)看看如何實(shí)現(xiàn)觀(guān)察者模式。參考以下實(shí)現(xiàn)代碼 -

import threading
import time
import pdb

class Downloader(threading.Thread):

   def run(self):
      print 'downloading'
      for i in range(1,5):
         self.i = i
         time.sleep(2)
            print 'unfunf'
         return 'hello world'

class Worker(threading.Thread):
   def run(self):
      for i in range(1,5):
         print 'worker running: %i (%i)' % (i, t.i)
         time.sleep(1)
         t.join()

         print 'done'

t = Downloader()
t.start()

time.sleep(1)

t1 = Worker()
t1.start()

t2 = Worker()
t2.start()

t3 = Worker()
t3.start()

執(zhí)行上述程序生成以下輸出 -

解釋說(shuō)明

上面的代碼解釋了下載特定結(jié)果的過(guò)程。 根據(jù)觀(guān)察者模式邏輯,每個(gè)對(duì)象都被視為觀(guān)察者。 它在事件觸發(fā)時(shí)打印輸出。


上一篇:隊(duì)列下一篇:集合