Js設計模式,工廠滔岳、訂閱、單體挽牢、觀察者等

如果覺得還有點用谱煤,請您給我一個贊!您的贊是我堅持下去的動力禽拔!

為了不為學習設計模式而學習設計模式,我們從實際運用的角度來看一下常用的設計模式,我會用盡量少的代碼來描述設計模式

  • 工廠模式
    產(chǎn)生規(guī)定規(guī)格內(nèi)的相似對象
    應用場景:創(chuàng)建組件刘离、創(chuàng)建各類對象等
  function createPerson(name,age,sex){
    let obj=new Object();
    obj.name=name;
    obj.age=age;
    obj.sex=sex;
    return obj;
  }
  • 觀察者模式
    每次觸發(fā)行為將通知所有的觀察者
    應用場景:事件監(jiān)聽、攔截器
  let eatWacher=[fn,fn2,fn3];//存放所有的觀察者
  function eat(){
    console.log('eatting');
    eatWacher.map((fn)=>{fn()});//當觸發(fā)一個事件時,通知所有的觀察者
  }
  • 單體模式
    對象只被實例化一次睹栖,重復調(diào)用時為已創(chuàng)建的實例
    應用場景:只需要創(chuàng)建一次對象即可的硫惕,比如全局的組件
  function getInstance(){
    if(!this.instance){
      this.instance=new Object();
    }
    return this.instance;
  }
  • 訂閱-發(fā)布模式
    訂閱者像訂閱中心預定自己關心的消息類型
    訂閱中心在收到事件的時候,分發(fā)給訂閱者他們關心的事務
    應用場景:消息中心
  var buyPhoneEvent={
    list:[],
    listen(key,fn){
      this.list[key]=this.list[key]||[];
      this.list[key].push(fn);
    },
    tigger(...params){
      var key = (params&&params[0])?params[0]:"";
      if(!key)return;
      var lst = this.list[key];
      if(!lst||lst.length===0)return;
      lst.map((fn)=>{fn.apply(this,params)})
    }
  };

  buyPhoneEvent.listen('iphone',(...params)=>{console.log(`buy iphone ${params[0]}-${params[1]}`)});
  buyPhoneEvent.listen('huawei',(...params)=>{console.log(`buy huawei ${params[0]}-${params[1]}`)});

  buyPhoneEvent.tigger("iphone","4999");
  buyPhoneEvent.tigger("huawei","2999");
  buyPhoneEvent.tigger("xiaomi","999");
  • 利用閉包和Map給數(shù)據(jù)創(chuàng)建表野来,利用查表法快速查找數(shù)據(jù)
    使用場景:
    有一個幾萬長度的員工列表恼除,需要快速能找到員工對應的數(shù)據(jù)
function makeBufferMap(list){
    let map = {};
    list.forEach(item=>map[item]=true);//這里true也可以換成數(shù)據(jù)
    return function (val){
      return map[val];
    }
}
var findStaff = makeBufferMap(['jack','tom','peter']);
findStaff('jack');//true
findStaff('a');//false
findStaff('peter');//true
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市曼氛,隨后出現(xiàn)的幾起案子豁辉,更是在濱河造成了極大的恐慌,老刑警劉巖舀患,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件徽级,死亡現(xiàn)場離奇詭異,居然都是意外死亡构舟,警方通過查閱死者的電腦和手機灰追,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來狗超,“玉大人弹澎,你說我怎么就攤上這事∨溃” “怎么了苦蒿?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長渗稍。 經(jīng)常有香客問我佩迟,道長,這世上最難降的妖魔是什么竿屹? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任报强,我火速辦了婚禮,結(jié)果婚禮上拱燃,老公的妹妹穿的比我還像新娘秉溉。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布召嘶。 她就那樣靜靜地躺著父晶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪弄跌。 梳的紋絲不亂的頭發(fā)上甲喝,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天,我揣著相機與錄音铛只,去河邊找鬼埠胖。 笑死,一個胖子當著我的面吹牛淳玩,可吹牛的內(nèi)容都是我干的押袍。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼凯肋,長吁一口氣:“原來是場噩夢啊……” “哼谊惭!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起侮东,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤圈盔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后悄雅,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體驱敲,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年宽闲,在試婚紗的時候發(fā)現(xiàn)自己被綠了众眨。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡容诬,死狀恐怖娩梨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情览徒,我是刑警寧澤狈定,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站习蓬,受9級特大地震影響纽什,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜躲叼,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一芦缰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧枫慷,春花似錦让蕾、人聲如沸包斑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至神帅,卻和暖如春再姑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背找御。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工元镀, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人霎桅。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓栖疑,卻偏偏與公主長得像,于是被迫代替她去往敵國和親滔驶。 傳聞我的和親對象是個殘疾皇子遇革,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353