JavaScript--監聽者模式

好的代碼是什么?我覺的是是:代碼結構清晰、每個功能單一、方便測試、拿來就能用、解耦。

監聽者模式前端那是天天接觸的,比如常用的click事件(第一代事件只能算回調)。
不過除此之外還是很多地方需要用到的,比如書生開源的XXY庫里面,輪播插件監聽Gap滑動值,焦點返回。這樣的話代碼結構就很清晰。比一個更接近生活的例子。
你寫了一個游戲,然后你有了別的任務,要讓別人在游戲初始化之后再添加一個新的功能,他要閱讀一遍代碼才能知道再哪里加。

完整的監聽者模式對象

// Tips 代碼這段代碼使用湯姆大叔寫的
//通用代碼
var observer = {
    //訂閱
    addSubscriber: function (callback) {
        this.subscribers[this.subscribers.length] = callback
    },
    //退訂
    removeSubscriber: function (callback) {
        for (var i = 0; i < this.subscribers.length; i++) {
            if (this.subscribers[i] === callback) {
                delete (this.subscribers[i])
            }
        }
    },
    //發布
    publish: function (what) {
        for (var i = 0; i < this.subscribers.length; i++) {
            if (typeof this.subscribers[i] === 'function') {
                this.subscribers[i](what)
            }
        }
    },
    // 將對象o具有觀察者功能
    make: function (o) { 
        for (var i in this) {
            o[i] = this[i]
            o.subscribers = []
        }
    }
}

讓我們監聽一個對象吧。

var obj = {
    f: function(a){
        this.publish(a)
    }
}
observer .make(obj)

好了,開始訂閱AND發布

// 訂閱
obj.addSubscriber(function(e){
    console.log('pusb:'+e)
})
// 發布
obj.f('一條小道消息')

OK,好了。
--END--

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,841評論 25 708
  • 工廠模式類似于現實生活中的工廠可以產生大量相似的商品,去做同樣的事情,實現同樣的效果;這時候需要使用工廠模式。簡單...
    舟漁行舟閱讀 7,808評論 2 17
  • 接觸前端兩三個月的時候,那時候只是聽說設計模式很重要,然后我就去讀了一本設計模式的書,讀了一部分,也不知道這些設計...
    艱苦奮斗的侯小憨閱讀 3,085評論 2 39
  • 清晨‖你好! 今天的天陰沉沉的、 沒有一縷陽光照射、 郁悶的心情猶然而生、 躺在床上思緒萬分、 有些事情要怎么表達...
    厚德能載物閱讀 177評論 0 0
  • 第四十三顆:一個能控制住不良情緒的人才是強大的;水深則流緩,語遲則人貴;我們花了兩年時間學說話,卻要花數十年時間學...
    水淼?爺閱讀 215評論 0 0