Javascript设计模式学习笔记

一、单例模式

  定义:保证只有一个类仅有一个实例,并提供一个访问它的全局访问点

  线程池、全局缓存、浏览器中的windows对象 

var getSingle = function (fn) {
  var result;
  return function () {
    return result || (result = fn.apply(this, argumnets))
  }      
}    

  

二、策略模式

  定义:定义一些列的算法,把它们一个个封装起来,并且使它们可以相互替换

var strategies = {
  "S": function (salary) {
      return salary * 4      
  },
  "A": function (salary) {
      return salary * 3      
  },
  "B": function (salary) {
      return salary * 2
  }
}

var calculateBonus = function (level, salary) {
  return strategies[level][salary]
}

console.log(calculateBonus("S", 20000))
console.log(calculateBonus("A", 10000))

  

三、代理模式

  定义:为一个对象提供一个代用品或占位符,以便控制对他的访问

  保护代理:代理B帮助代理A过滤掉一些请求

  虚拟代理:把一些开销很大的对象,延迟到真正需要它的时候再去创建

四、迭代器模式

  定义:提供一种方法顺序访问一个聚合对象中的各个元素,而不需要暴露该对象的内部表示

  实现内部迭代器:

var each = function (ary, vallback) {
  for(var i = 0; i < ary.length; i++) {
    callback.call(ary[i], i, ary); // 把下标和元素当作参数传给callback函数
  }  
}    

each([1, 2, 3], function (i, n) {
   console.log(i, n) 
})

  

五、发布-订阅模式(观察者模式)

  定义:对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将收到通知。js中一般用事件模型来替代传统的发布订阅模式

 

六、命令模式

七、组合模式

posted @ 2022-03-24 16:50  狮子爱吃草  阅读(29)  评论(0编辑  收藏  举报