常见设计模式

模块模式 使用场景:进行封装时

//立即执行函数 var Person= (function(){ //执行部分 var prams function(){} //暴露接口 return{ } })()

【常见设计模式】立即执行函数具有私有作用域,可以将执行代码封装,然后通过return来提供接口
工厂模式 使用场景:只需要简单的创建一个对象
function createPerson(opts){ var person={} person.action1: function(){} return person; }

基础版的构造函数模式(无法通过instance of 获得其创建者),使用时直接传入参数获得对象。var p1 = createPerson(opts)
构造函数模式 使用场景:一个组件,需要有独立的功能,稍微复杂时
function Person(){ this.pram1 this.pram2 } Person.prototype.xxx=

使用函数和原型链构造一个类,使用时通过new来创建新的实例对象
混合模式 使用场景:涉及到继承时
即构造函数模式及其继承的实现
实现继承的方法有
http://www.jianshu.com/p/d18471b1064a
  • 使用prototype,并利用空对象作为中介
  • 拷贝继承
  • Object.create
单例模式 使用场景:得到一个独一无二恒定的对象
var Pepple =(function(){ //私有变量及方法 var instance; function init() { //define&do something return{ } } //公有变量和方法 return{ //确保只有一个实例 createPeople:function(){ if(!instance){ instance = init(); } return instance; } }()) //obj1和obj2是相等的 var obj1 = People.getInstance() var obj2 = People.getInstance()

发布订阅模式
var Eventcenter =(function(){ var events = {} function on(evt,handler){ events[evt] = events[evt] || []; //初始化为数组,以便加入多个handler events[evt].push({ handler:handler }) }function one(evt,handler){ events[evt] = events[evt] || []; events[evt].push({ handler:handler, one:true } }) } function off(evt,handler){ if (!handler){ events[evt] = [] }else{ events[evt].remove({handler:handler},1)||events[evt].remove({handler:handler,one:true},1) } } function fire(evt,args){ if(!events[evt]){ return; } for(var i=0; i

    推荐阅读