一、单例模式
定义:保证只有一个类仅有一个实例,并提供一个访问它的全局访问点
线程池、全局缓存、浏览器中的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中一般用事件模型来替代传统的发布订阅模式
六、命令模式
七、组合模式