麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Ruby > 正文

實(shí)例解析Ruby設(shè)計(jì)模式開發(fā)中對(duì)觀察者模式的實(shí)現(xiàn)

2020-02-24 15:39:37
字體:
供稿:網(wǎng)友

觀察者模式定義了一對(duì)多的依賴關(guān)系,允許多個(gè)觀察者對(duì)象同時(shí)監(jiān)聽一個(gè)主題對(duì)象,當(dāng)這個(gè)主題對(duì)象的狀態(tài)發(fā)生變化時(shí),會(huì)通知所有觀察者對(duì)象,以便它們能夠自動(dòng)更新自己,一起來看看吧!

一般來說,觀察者模式的定義應(yīng)該是這樣的:building a clean interface between the source of news that some object has changed and the consumers of that news。

觀察者模式在消息的生產(chǎn)者和消費(fèi)者之間建立了clean interface,這樣就使得消息的生產(chǎn)者和消費(fèi)者之間的耦合是抽象的。被觀察者可以不認(rèn)識(shí)任何一個(gè)的觀察者,它只知道他們都實(shí)現(xiàn)了一個(gè)共同的接口。由于觀察者和被觀察者沒有緊密的耦合在一起,所以他們可以屬于不同的抽象層次。

觀察者模式支持廣播通信,被觀察者會(huì)向每個(gè)注冊(cè)了的觀察者發(fā)送廣播的change消息。這種廣播模式就有可能導(dǎo)致觀察者被循環(huán)通知,消耗極多的資源。

廣義的觀察者模式中應(yīng)該定義2個(gè)角色。

Subject:產(chǎn)生消息的類就是subject。在上一篇的例子中就是Tester類;

Observer: 對(duì)subject產(chǎn)生的消息感興趣的類。在上篇的例子中就是稅務(wù)局,社保局類;

若是以男女關(guān)系來類比subject和observer,subject就應(yīng)該是observer這個(gè)男孩子暗戀的女孩。男孩對(duì)女孩癡心一片,但是女孩總是若近若離,遮遮掩掩。于是男孩對(duì)女孩說:我會(huì)等你的,如果你有了歸宿請(qǐng)通知我,否則我一直等下去。在這里男孩就是女孩的observer,他對(duì)女孩產(chǎn)生的消息——是否有了歸宿感興趣。于是當(dāng)有了歸宿這個(gè)消息產(chǎn)生時(shí),女孩會(huì)通知男孩,一個(gè)愛情杯具誕生,但是完整的observer模式會(huì)完美實(shí)現(xiàn)。

作為subject,下面的這些接口是其應(yīng)該實(shí)現(xiàn)的:

  • 增加observer
  • 移除observer
  • 通知observer

而作為observer,其需要實(shí)現(xiàn)接收通知時(shí)候的具體表現(xiàn)。

示例:
ruby中自帶實(shí)現(xiàn)觀察者模式的類observer。可以利用它來實(shí)現(xiàn)觀察者模式。

代碼例子:

# -*- coding: GB2312 -*-  require 'observer' # 觀察者模式(ruby)的使用例子  # 被觀察者P class PObservable include Observable  end  # 觀察者A class AObserver # update方法名是必須的要有的 def update(arg)   puts "AObserver 被通知了 " + arg end end  # 觀察者B class BObserver # update方法名是必須的要有的 def update(arg)   puts "BObserver 被通知了 " + arg end end  # 觀察者初始化 observer_a = AObserver.new observer_b = BObserver.new  # 被觀察者初始化 obj = PObservable.new  # 添加監(jiān)視對(duì)象 obj.add_observer(observer_a) obj.add_observer(observer_b)  # 被觀察者改變了 ->這段代碼 必須有 不然無法通知到觀察者 obj.changed  # 通知觀察者 obj.notify_observers("Test") ?

輸出結(jié)果:

AObserver 被通知了 TestBObserver 被通知了 Test

希望通過武林技術(shù)頻道介紹的實(shí)例解析Ruby設(shè)計(jì)模式開發(fā)中對(duì)觀察者模式的實(shí)現(xiàn),相信大家已經(jīng)能掌握了。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 久久久久免费精品国产小说色大师 | 日本xxxx色视频在线观看免费, | 毛片在线看免费 | 久久蜜桃精品一区二区三区综合网 | 天海翼四虎精品正在播放 | 国产精品999在线 | 国产精品爱久久久久久久 | 亚洲人成中文字幕在线观看 | 久久久久一区二区三区四区五区 | 综合99| 成年免费网站 | 午夜视频在线免费观看 | 中日韩乱码一二新区 | 黄色大片在线观看 | 91精品国产综合久久青草 | 午夜精品福利视频 | 一本色道久久久888 香蕉视频99 | 91短视频在线免费观看 | 免费观看黄色一级视频 | 国产精品夜色视频一级区 | 欧美一级特黄特色大片免费 | 激情大乳女做爰办公室韩国 | 久久人人爽人人爽人人片av高清 | 美女黄网站免费观看 | 日日噜噜噜夜夜狠狠久久蜜桃 | 广州毛片 | 羞羞视频免费网站男男 | av在线免费看片 | 久久9999久久| 中国av中文字幕 | 在线成人看片 | 成人福利在线观看 | 黄色a级片视频 | 欧美日本国产精品 | 黄色一级片免费观看 | 欧美 亚洲 视频 | 精品国产一区二区三区四区阿崩 | 亚洲精品aa | 有色视频在线观看 | 久久久久久久久国产 | 亚洲精品无码不卡在线播放he |