常见设计模式

模块模式

使用场景:进行封装时

//立即执行函数
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<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
    }   
})();
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、设计模式的起源 最早提出“设计模式”概念的是建筑设计大师亚力山大Alexander。在1970年他的《建筑的永...
    冰凡513阅读 389评论 0 0
  • 1.单例模式 定义: 单件模式确保一个类只有一个实例,并提供一个全局访问点. 使用场景: 用于创建独一无二的,只能...
    好奇而已阅读 531评论 0 0
  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 7,927评论 2 17
  • 今天是冬至节,对于我来说,没有什么感觉,因为我家乡不过这个节日,朋友圈都是一些该吃饺子汤圆的祝福语,看着麻木了,也...
    千羽塔罗师阅读 148评论 0 1
  • 亲爱的CC:你好! 今年过年的时候,问你想考级吗?你考虑以后说想的,于是,进入了五级备战阶段,近半年来,你一直在反...
    Leice阅读 300评论 0 1