摘要:來(lái)源于阿賢博客觀察者模式我們?cè)谌粘i_(kāi)發(fā)使用經(jīng)常遇到一些場(chǎng)景需要使用到觀察者模式,比如登錄成功需要改動(dòng)同步頁(yè)面多個(gè)模塊的信息,這時(shí)最佳選擇是使用觀察者模式。
來(lái)源于:阿賢博客
observer 觀察者模式我們?cè)谌粘i_(kāi)發(fā)使用經(jīng)常遇到一些場(chǎng)景需要使用到觀察者模式,比如登錄成功需要改動(dòng)同步頁(yè)面多個(gè)模塊的信息,這時(shí)最佳選擇是使用observer 觀察者模式。
又是一個(gè)難忘清明節(jié),這一次在大巴上過(guò)節(jié)了,只能在大巴上寫(xiě)作咯,從昨晚9點(diǎn)30分在廣州省汽車(chē)站出發(fā)到現(xiàn)在中午12點(diǎn)30分還未到。歷經(jīng)了15個(gè)小時(shí)還未到家,不是老家路途太遙遠(yuǎn),而是中國(guó)人有錢(qián)的人家太多了,導(dǎo)致一路堵車(chē)。想必很多小伙伴都有同樣的感受吧,不過(guò)還差1個(gè)多小時(shí)就到家了。
class Apm { constructor(){ //觀察者模式 this.observer = { //訂閱 addSubscriber: function (callback, opt) { this.subscribers[this.subscribers.length] = { callback: callback, opt: (opt !== "undefined") ? opt : {} }; }, //退訂 removeSubscriber: function (callback) { for (var i = 0; i < this.subscribers.length; i++) { if (this.subscribers[i].callback === callback) { delete (this.subscribers[i]); } } }, //發(fā)布 publish: function (what, _observer) { for (var i = 0; i < this.subscribers.length; i++) { if (typeof this.subscribers[i].callback === "function") { let observer = (_observer !== "undefined") ? _observer : {}; // 執(zhí)行注冊(cè)的各種回調(diào) this.subscribers[i].callback({ret: what, opt: this.subscribers[i].opt, observer: observer}); } } }, // 將對(duì)象o具有觀察者功能 make: function (o) { for (var i in this) { o[i] = this[i]; o.subscribers = []; } } }; this.observerLogin = { success: function (ret) { this.publish(ret, {type: "success"}); }, error: function(ret){ this.publish(ret, {type: "error"}); } }; // 創(chuàng)建觀察者模式 this.observer.make(this.observerLogin); } login() { fetch({}).then((res)=>{ if(res.code == 0){ //發(fā)布登錄成功 this.observerLogin.success(ret); }else{ //發(fā)布登錄失敗 this.observerLogin.error (ret); } }) } } var apm = new Apm; //業(yè)務(wù)邏輯 var Main = { init: function(){ var _ts = this; //監(jiān)聽(tīng)登錄成功時(shí)觸發(fā)數(shù)據(jù) apm.observerLogin.addSubscriber(function(params){ /*params = { ret: ret,//接口數(shù)據(jù) opt: opt, //方法傳參 observer: { //觀察者數(shù)據(jù) type: "success" } };*/ }, {_ts: _ts}); /**** 觀察者模式 ****/ var testPage = { comment: function (data) { console.log("評(píng)論功能的作者名字:" + data["name"], data["msg"]); // for(var key in data){ // console.log("key", key, data[key]); // } }, video: function (data){ console.log("視頻作者bid:" + data["bid"], data["msg"]); } }; //先注冊(cè)登錄觀察 apm.observerLogin.addSubscriber(testPage.comment); apm.observerLogin.removeSubscriber(testPage.video); } };
來(lái)源于:阿賢博客
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/103247.html
摘要:觀察者模式是一種使用頻率非常高的設(shè)計(jì)模式,無(wú)論是移動(dòng)應(yīng)用應(yīng)用或者桌面應(yīng)用,觀察者模式幾乎無(wú)處不在,它為實(shí)現(xiàn)對(duì)象之間的聯(lián)動(dòng)提供了一套完整的解決方案,凡是涉及到一對(duì)一或者一對(duì)多的對(duì)象交互場(chǎng)景都可以使用觀察者模式。 觀察者模式(Observer Pattern)屬于對(duì)象行為型模式的一種,定義對(duì)象之間的一種一對(duì)多依賴(lài)關(guān)系,使得每當(dāng)一個(gè)對(duì)象狀態(tài)發(fā)生改變時(shí),其相關(guān)依賴(lài)對(duì)象皆得到通知并被自動(dòng)更新。 ...
摘要:時(shí)間年月日星期二說(shuō)明本文部分內(nèi)容均來(lái)自慕課網(wǎng)。慕課網(wǎng)教學(xué)源碼學(xué)習(xí)源碼第一章觀察者模式概述課程簡(jiǎn)介觀察者模式的定義定義對(duì)象間的一種一對(duì)多的依賴(lài)關(guān)系。 時(shí)間:2017年08月29日星期二說(shuō)明:本文部分內(nèi)容均來(lái)自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)源碼:https://github.com/zccodere/s...學(xué)習(xí)源碼:https://github.com/z...
摘要:簡(jiǎn)介學(xué)習(xí)本篇博文,我們知道在什么場(chǎng)景下使用觀察者模式。觀察者模式給我們?cè)诮窈箝_(kāi)發(fā)中什么思想。為什么需要觀察者模式從定義中我們可以知道觀察者模式當(dāng)對(duì)象改變時(shí),其他依賴(lài)的對(duì)象都會(huì)收到改變信息的狀態(tài)。 簡(jiǎn)介 1.學(xué)習(xí)本篇博文,我們知道在什么場(chǎng)景下使用觀察者模式。2.觀察者模式的優(yōu)缺點(diǎn)。3.觀察者模式給我們?cè)诮窈箝_(kāi)發(fā)中什么思想。 場(chǎng)景 某家科技公司目前在開(kāi)發(fā)一個(gè)項(xiàng)目,設(shè)計(jì)小組需要上報(bào)項(xiàng)目的進(jìn)度...
摘要:三內(nèi)置觀察者模式了解內(nèi)置觀察者模式包內(nèi)包含最基本的類(lèi)與接口,這和上面的接口與接口很類(lèi)似。根據(jù)具體的需求,如果內(nèi)置的觀察者模式不能滿(mǎn)設(shè)計(jì),那么我們可以像剛開(kāi)始那樣自己實(shí)現(xiàn)一套觀察者模式。參考資料設(shè)計(jì)模式 一、了解觀察者模式 1.1 什么是觀察者模式 觀察者模式定義了對(duì)象之間的一對(duì)多依賴(lài),這樣一來(lái),當(dāng)一個(gè)對(duì)象狀態(tài)改變時(shí),它的所有依賴(lài)者都會(huì)收到通知并自動(dòng)更新。 典型的問(wèn)題比如報(bào)社,只要你是他...
摘要:作用默認(rèn)的,直接在當(dāng)前線(xiàn)程運(yùn)行總是開(kāi)啟一個(gè)新線(xiàn)程用于密集型任務(wù),如異步阻塞操作,這個(gè)調(diào)度器的線(xiàn)程池會(huì)根據(jù)需要增長(zhǎng)對(duì)于普通的計(jì)算任務(wù),請(qǐng)使用默認(rèn)是一個(gè),很像一個(gè)有線(xiàn)程緩存的新線(xiàn)程調(diào)度器計(jì)算所使用的。這個(gè)使用的固定的線(xiàn)程池,大小為核數(shù)。 轉(zhuǎn)載請(qǐng)注明出處:https://zhuanlan.zhihu.com/p/20687307 RxJava系列1(簡(jiǎn)介) RxJava系列2(基本概念及使...
閱讀 3699·2021-11-11 16:55
閱讀 1646·2021-10-08 10:04
閱讀 3581·2021-09-27 13:36
閱讀 2761·2019-08-30 15:53
閱讀 1855·2019-08-30 11:17
閱讀 1259·2019-08-29 16:55
閱讀 2098·2019-08-29 13:57
閱讀 2513·2019-08-29 13:13