Js设计模式,工厂、订阅、单体、观察者等

2019-10-29  本文已影响0人  踩坑怪At芬达

如果觉得还有点用,请您给我一个赞!您的赞是我坚持下去的动力!

为了不为学习设计模式而学习设计模式,我们从实际运用的角度来看一下常用的设计模式,我会用尽量少的代码来描述设计模式

  function createPerson(name,age,sex){
    let obj=new Object();
    obj.name=name;
    obj.age=age;
    obj.sex=sex;
    return obj;
  }
  let eatWacher=[fn,fn2,fn3];//存放所有的观察者
  function eat(){
    console.log('eatting');
    eatWacher.map((fn)=>{fn()});//当触发一个事件时,通知所有的观察者
  }
  function getInstance(){
    if(!this.instance){
      this.instance=new Object();
    }
    return this.instance;
  }
  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");
function makeBufferMap(list){
    let map = {};
    list.forEach(item=>map[item]=true);//这里true也可以换成数据
    return function (val){
      return map[val];
    }
}
var findStaff = makeBufferMap(['jack','tom','peter']);
findStaff('jack');//true
findStaff('a');//false
findStaff('peter');//true
上一篇 下一篇

猜你喜欢

热点阅读