常见设计模式

模块模式

使用场景:进行封装时

//立即执行函数
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
    }   
})();
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容

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