美文网首页
Js设计模式,工厂、订阅、单体、观察者等

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

作者: 踩坑怪At芬达 | 来源:发表于2019-10-29 21:32 被阅读0次

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

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

  • 工厂模式
    产生规定规格内的相似对象
    应用场景:创建组件、创建各类对象等
  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");
  • 利用闭包和Map给数据创建表,利用查表法快速查找数据
    使用场景:
    有一个几万长度的员工列表,需要快速能找到员工对应的数据
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

相关文章

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

    如果觉得还有点用,请您给我一个赞!您的赞是我坚持下去的动力! 为了不为学习设计模式而学习设计模式,我们从实际运用的...

  • js代码题

    js对象的深度克隆 js数组去重 js常用设计模式的实现思路,单例,工厂,代理,装饰,观察者模式等

  • 事件池 dom0 dom2

    设计模式发布订阅-观察者事件池 存放->按顺序执行模块模式闭包工厂模式无法区分关系构造函数模式混合模式(工厂 模块...

  • RxJava基础—观察者模式

    设计模式-观察者模式 观察者模式:观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式...

  • 面試小記

    1:设计模式 观察者模式observer observerble,subscribe (订阅) (1)观察者对象 ...

  • JS 设计模式

    工厂模式 单体模式 模块模式 代理模式 职责链模式 命令模式 模板方法模式 策略模式 发布-订阅模式 中介者模式 ...

  • 前端设计模式

    JS设计模式一:工厂模式jS设计模式二:单例模式JS设计模式三:模块模式JS设计模式四:代理模式JS设计模式五:职...

  • js常见设计模式

    1.写出 构造函数模式、混合模式、模块模式、工厂模式、单例模式、发布订阅模式的范例。 JS设计模式大全 构造函数模...

  • web前端之面试提纲

    前端基础 JS 原型链机制的理解 设计模式:了解基本的前端设计模式,单例、适配器、工厂、观察者。 跨域的方式、同源...

  • iOS单例模式

    1 单例模式 它是一种设计模式(常见的设计模式有:观察者模式、工厂模式、门面模式等)。单例设计模式中,一个类只有一...

网友评论

      本文标题:Js设计模式,工厂、订阅、单体、观察者等

      本文链接:https://www.haomeiwen.com/subject/dyqnvctx.html