亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Ruby > 正文

js中的觀察者模式的實現方法

2020-02-24 15:39:53
字體:
來源:轉載
供稿:網友

有時候我們會被問到JS中的觀察者模式,其實這個這個模式大家都了解過的,可以說,它是動態語言中非常有用的設計模式。今天武林技術頻道小編馬上為大家介紹js中的觀察者模式的實現方法。

觀察者模式

關于觀察者模式,《松本行弘的程序世界》講的非常清楚:觀察者模式是當某個對象狀態發生變化時,依存于該狀態的全部對象自動得到通知,被觀察者和觀察者們是一對多的關系。書中還舉了一個非常易懂的例子:獲取系統當前時間并輸出到命令行中。如果要硬編碼也很簡單,定義一個方法,先獲取時間,然后再處理展示。這樣獲取時間的功能基本就不能復用了,因為帶了個處理展示的拖油瓶。

如果用觀察者模式則可以這樣:定義兩個類,一個用于計時,獲取當前時間;另一個用于展示時間。展示時間的類就是觀察者,這樣做的好處是降低相互的依賴性。第一個類改變后不需要處理任何事物,只需要發出通知告訴它的觀察者們,具體事物由它們處理。比如有一天我們想換種形式展示時間,或者用多種方式展示時間,完全不需要牽扯到第一個類。

PS:《松本行弘的程序世界》真是一本好書。起初是想把這本書當做ruby教程來讀的,后來發現根本不是,書中用非常易懂的語言深入淺出的講明白了很多深奧的哲學思想。雖然這本書對我這種剛入門的菜鳥來說幾乎沒有什么實用價值,但是讀完之后有種豁然開朗的感覺,是一次非常好的閱讀體驗。

ruby實現

用ruby實現觀察者模式簡直簡單清晰的令人發指,上代碼:

?

復制代碼 代碼如下:

require "observer"
#被觀察者
class Subject
??? include Observable
??? def notify
??????? #do sth
??????? changed #更新標志為真
??????? notify_observers(*args) #如果更新標志為真,調用觀察者帶參數args的方法
??? end
end
#觀察者
class Obs
??? #回調函數,好像只能這么叫
??? def update
??????? #do sth
??? end
end
#實例
sub = Subject.new
sub.add_observer(Obs.new)
sub.notify

?

沒錯,就是這么簡單。。。
主要是依靠Observer模塊,除了上面用到的,此模塊還有如下接口:

1.delete_observer(obj) 刪除特定的觀察者
2.delete_observers 刪除全部觀察者
3.count_observers 獲取觀察者數目
4.changed? 檢查更新標志

php實現

php實現起來也不麻煩:

復制代碼 代碼如下:

//被觀察者
class Subject
{
??? private $_observers;
??? public function __construct() {
??????? $this->_observers = array();
??? }
??? public function add_observer($obs) {
??????? $this->_observers[] = $obs;
??? }
??? public funtion delete_observer($bos) {
??????? $index = array_search($bos, $this->_observers);
??????? unset($this->_observers[$index]);
??? }
??? public function notify_observers() {
??????? foreach($this->_observers as $v) {
??????????? $v->update();
??????? }
??? }
}
//觀察者
class Observer
{
??? public function __construct() {
??????? do sth;
??? }
??? public function update() {
??????? do sth;
??? }
}
//實例
$sub = new Subject();
$obs = new Observer();
$sub->add_observer($obs);
$sub->notify_observers();

?

js實現

js實現起來也不麻煩,就是得寫些工具函數方便用,比如刪除數組指定的元素。下面只用最簡單的實現方法。

復制代碼 代碼如下:

//被觀察者
function Subject() {
??? var _this = this;
??? this.observers = [];
??? this.addObserver = function(obj) {
??????? _this.observers.push(obj);
??? }
??? this.deleteObserver = function(obj) {
??????? var length = _this.observers.length;
??????? for(var i = 0; i < length; i++) {
??????????? if(_this.observers[i] === obj) {
??????????????? _this.observers.splice(i, 1);
??????????? }
??????? }
??? }
??? this.notifyObservers = function() {
??????? var length = _this.observers.length;
??????? console.log(length)
??????? for(var i = 0; i < length; i++) {
??????????? _this.observers[i].update();
??????? }
??? }
}
//觀察者
function Observer() {
??? this.update = function() {
??????? alert(1)
??? }
}
var sub = new Subject();
var obs = new Observer();
sub.addObserver(obs);
sub.notifyObservers();
var sub = new Subject();

?

結論:ruby可以讓我們專注于程序設計本身,而不是程序的語法和特性。js靈活多變,是一門完備的編程語言除了生孩子什么都能實現,就是玩起來要下點功夫。php嘛,中規中矩,沒啥好說的。

通過上文介紹的js中的觀察者模式的實現方法,相信大家了解了不少啦。如不明白的話,給武林技術頻道小編留言,我們會讓你徹底明白!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲深夜福利在线| 国产精欧美一区二区三区| 欧美日韩国产限制| 成人在线一区二区| 国产精品va在线| 丝袜亚洲另类欧美重口| 日韩av免费看网站| 色爱精品视频一区| 欧洲亚洲免费视频| 亚洲成在人线av| 亚洲乱亚洲乱妇无码| 91大神福利视频在线| 91a在线视频| 亚洲最大激情中文字幕| 亚洲综合日韩在线| 亚洲一区二区免费在线| 日韩欧美视频一区二区三区| 992tv成人免费影院| 成人精品一区二区三区| 日韩精品久久久久久久玫瑰园| 色噜噜狠狠色综合网图区| 136fldh精品导航福利| 亚洲第一二三四五区| 日韩毛片在线观看| 亚洲a区在线视频| 欧美日韩国产麻豆| 午夜精品福利在线观看| 亚洲最大福利视频网站| 日韩激情视频在线播放| 欧美成人激情视频免费观看| 日韩中文字幕在线视频| 亚洲精选中文字幕| 欧美性xxxx极品hd欧美风情| 日韩免费不卡av| 日韩欧美在线字幕| 日韩电影中文字幕在线| 中文字幕欧美日韩精品| 欧美电影院免费观看| 日本欧美在线视频| 午夜欧美不卡精品aaaaa| 欧美午夜精品久久久久久人妖| 久热在线中文字幕色999舞| 国产精品91免费在线| 亚洲最新在线视频| 精品小视频在线| 久久久久国产精品免费| 97视频com| 国产精品久久久久av| 91丨九色丨国产在线| 51精品在线观看| 一区二区三区美女xx视频| 国产免费一区二区三区香蕉精| 久久精品这里热有精品| 国产69精品久久久久久| 91中文在线观看| 欧美激情精品久久久久久蜜臀| 欧美久久精品一级黑人c片| 91高潮在线观看| 欧美日韩在线视频首页| 亚洲精品丝袜日韩| 国产精品一二三视频| 2018日韩中文字幕| 一区二区亚洲精品国产| 日韩在线视频中文字幕| 亚洲福利视频专区| 欧美色视频日本高清在线观看| 成人在线小视频| 中文字幕日韩精品在线观看| 国产精品尤物福利片在线观看| 亚洲激情在线视频| 日韩成人在线电影网| 国产午夜精品久久久| 色综合久久久久久中文网| 国产精品揄拍一区二区| 日韩视频一区在线| 亚洲成年人影院在线| 亚洲最大的网站| 欧美成年人视频网站欧美| 性欧美长视频免费观看不卡| 高跟丝袜欧美一区| 国产日韩欧美日韩大片| 欧美一区二区三区四区在线| 日韩综合视频在线观看| 日韩女在线观看| 亚洲成人在线网| 欧美日韩免费网站| 成人免费自拍视频| 国产一级揄自揄精品视频| 国产精品视频不卡| 久久久久久久网站| 欧美综合在线观看| 在线成人激情黄色| 欧美性猛交xxxxx水多| 91香蕉嫩草影院入口| 日韩毛片在线看| 欧美刺激性大交免费视频| 国产激情久久久久| 97国产精品人人爽人人做| 国产精品爽爽爽爽爽爽在线观看| 国产精品福利在线| 欧美黑人xxx| 色无极亚洲影院| 欧美性猛交99久久久久99按摩| 国内外成人免费激情在线视频| 欧美成人手机在线| 91精品国产自产91精品| 中文字幕一区日韩电影| 欧美限制级电影在线观看| 97香蕉超级碰碰久久免费软件| 亚洲激情自拍图| 国产一区二区三区中文| 亚洲男人天天操| 国产精品中文字幕在线| 草民午夜欧美限制a级福利片| 国产精品美腿一区在线看| 欧美第一页在线| 久久精品国产亚洲精品2020| 国产精品久久久久久久久借妻| 性欧美办公室18xxxxhd| 日韩在线免费视频观看| 欧美精品电影在线| 激情av一区二区| 国产精品三级网站| 日本三级韩国三级久久| 欧美在线视频一区二区| 欧美日韩色婷婷| 精品视频久久久久久| 91大神福利视频在线| 国产91在线高潮白浆在线观看| 亚洲免费av片| 欧美专区国产专区| 亚洲色图17p| www欧美xxxx| 国产91露脸中文字幕在线| 久久天天躁狠狠躁夜夜躁| 日韩欧美中文第一页| 久久精品电影网站| 久久久国产在线视频| 国产欧美精品久久久| 在线观看国产精品91| 国产精品美女主播| 日韩中文字幕在线看| 国产精品免费久久久久影院| 日本成人激情视频| 欧美激情亚洲激情| 欧美视频一二三| 欧美香蕉大胸在线视频观看| 97热在线精品视频在线观看| 久久视频免费在线播放| 亚洲aaaaaa| 国产精品综合久久久| 国产成人鲁鲁免费视频a| 国产一区欧美二区三区| 亚洲性视频网址| 久久久久99精品久久久久| 亚洲人成绝费网站色www| 国产亚洲综合久久| 成人a视频在线观看| 精品久久久久久| 精品人伦一区二区三区蜜桃网站| 日韩电影中文字幕| 91九色国产在线| 欧美在线不卡区| 欧美日韩一二三四五区|