一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術(shù)及教程分享平臺!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Ruby - 實例解析Ruby設(shè)計模式開發(fā)中對觀察者模式的實現(xiàn)

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

2020-05-08 10:22kucss Ruby

這篇文章主要介紹了實例解析Ruby設(shè)計模式開發(fā)中對觀察者模式的實現(xiàn),Ruby中自帶的observer類自然是絕佳的使用示例,需要的朋友可以參考下

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

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

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

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

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

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

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

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

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

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

示例:
ruby中自帶實現(xiàn)觀察者模式的類observer??梢岳盟鼇韺崿F(xiàn)觀察者模式。

代碼例子:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# -*- 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)視對象
obj.add_observer(observer_a)
obj.add_observer(observer_b)
 
# 被觀察者改變了 ->這段代碼 必須有 不然無法通知到觀察者
obj.changed
 
# 通知觀察者
obj.notify_observers("Test")
 

輸出結(jié)果:

?
1
2
AObserver 被通知了 Test
BObserver 被通知了 Test

延伸 · 閱讀

精彩推薦
  • RubyRuby迭代器的7種技巧分享

    Ruby迭代器的7種技巧分享

    這篇文章主要介紹了Ruby迭代器的7種技巧分享,Ruby中的迭代器非常人性化,本文既是講解了7個技巧也是講解了7種迭代器,需要的朋友可以參考下 ...

    腳本之家4782020-04-20
  • Ruby剖析 Ruby 訪問控制

    剖析 Ruby 訪問控制

    前面,我們說 Ruby 沒有函數(shù),只有方法.而且實際上有不止一種方法.這一節(jié)我們介紹 訪問控制 (accesscontrols). 想想當(dāng)我們在最高層而不是在一個類的定義里定義...

    ruby教程網(wǎng)3572020-04-08
  • RubyRuby進行文件信息輸出實例代碼

    Ruby進行文件信息輸出實例代碼

    Ruby進行文件信息輸出實例代碼,數(shù)據(jù)是隨機的,所以每次的記錄都會不同。 ...

    ruby教程網(wǎng)2962020-04-10
  • RubyRuby環(huán)境下安裝使用bundler來管理多版本的gem

    Ruby環(huán)境下安裝使用bundler來管理多版本的gem

    這篇文章主要介紹了Ruby環(huán)境下安裝使用bundler來管理多版本的gem的方法,舉了Ruby On Rails中的應(yīng)用實例來進行演示,需要的朋友可以參考下 ...

    日拱一卒4332020-05-10
  • RubyRuby簡潔學(xué)習(xí)筆記(一):字符串、數(shù)字、類和對象

    Ruby簡潔學(xué)習(xí)筆記(一):字符串、數(shù)字、類和對象

    這篇文章主要介紹了Ruby簡潔學(xué)習(xí)筆記(一):字符串、數(shù)字、類和對象,本文是學(xué)習(xí)筆記第一篇,需要的朋友可以參考下 ...

    腳本之家2472020-04-20
  • Ruby簡要說明Ruby中的迭代器

    簡要說明Ruby中的迭代器

    這篇文章主要介紹了Ruby中的迭代器,迭代器的概念在動態(tài)語言的編程中十分重要,文章中介紹了Ruby中的each迭代器和collect迭代器,需要的朋友可以參考下 ...

    goldensun2772020-04-25
  • RubyRuby設(shè)計模式編程中使用Builder建造者模式的實例

    Ruby設(shè)計模式編程中使用Builder建造者模式的實例

    這篇文章主要介紹了Ruby設(shè)計模式編程中使用Builder建造者模式的實例,建造者模式將一個復(fù)雜對象的構(gòu)造與它的表示分離,使同樣的構(gòu)建過程可以創(chuàng)建不同的表...

    范孝鵬2192020-05-07
  • RubyCentOS中配置Ruby on Rails環(huán)境

    CentOS中配置Ruby on Rails環(huán)境

    經(jīng)過一個上午的折騰,終于把ROR環(huán)境在CentOS中搞定,繞了很多彎路,把文章寫下來總結(jié)一下 ...

    可樂加糖4762020-04-12
主站蜘蛛池模板: 污斗罗大陆 | 毛片在线免费观看网站 | 国产成人精品免费午夜 | 性夜影院午夜看片 | 美女的隐私脱裤子无遮挡 | 成年人在线视频观看 | 国产一级黄毛片 | 99久久精品免费精品国产 | 我的漂亮朋友在线观看全集免费 | freefron性中国 | 99热综合在线 | 国产成人精品高清在线 | 第一次不是你高清在线观看 | 扒开黑女人p大荫蒂老女人 扒开大腿狠狠挺进视频 | 日本一区二区三区久久 | 青青草99热久久 | 天天做天天玩天天爽天天 | 华人亚洲欧美精品国产 | 男人女人插| 国产精品日韩欧美一区二区三区 | 国产91精品久久久久久 | 五月天淫 | 91sao在线看片水片 | 国产精品视频网 | 欧美日韩一区二区三区久久 | 日韩一级精品视频在线观看 | 精品国产区 | 日本加勒比在线播放 | 天堂网在线.www天堂在线视频 | 久久久乱码精品亚洲日韩 | 京东热dj6666| 日韩欧美高清视频 | 国产馆在线观看免费的 | 成人一区二区丝袜美腿 | 我的美女奴隶 | 草草剧场| 亚洲国产天堂久久综合网站 | 色婷婷影院在线视频免费播放 | 动态图啪啪120秒免费看 | 国产毛片一级aaaaa片 | 1024国产精品视频观看 |