常见设计模式

2017-04-21  本文已影响0人  饥人谷_風逝

模块模式

使用场景:进行封装时

//立即执行函数
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

单例模式

使用场景:得到一个独一无二恒定的对象

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<events[evt].length;i++){
            events[evt][i].handler(args);
            if (events[evt][i].one){
            events[evt].splice(i,1)
            i -= 1
            }
        }
    }
    return {
        on: on,
        one: one,
        off: off,
        fire: fire
    }   
})();
上一篇 下一篇

猜你喜欢

热点阅读