美文网首页
设计模式

设计模式

作者: 简人CC | 来源:发表于2017-09-15 13:59 被阅读0次
    • 构造函数
    function Person(name,age){
        
        this.name = name 
        this.age = age
    }
    
    Person.prototype.show = function(){
        console.log('My name is'+this.name,'My age is '+this.age)
    }
    var p1 = new Person('Lii',18)
    console.log(p1.show())
    
    • 混合模式(提取公用,节约内存)
    var Person = function(name,age){
        this.name = name
        this.age = age
    }
    Person.prototype.sayHi=function(){
        console.log(this.name, this.age)
    }
    var p1 = new Person('Lii',18)
    p1.sayHi()
    
    • 模块模式(利用闭包来访问内部)
    var Person = (function(){
        var name = 'xxx'
        var sayName = function(){
            console.log(name)
        }
    
        return {
            name:name,
            sayName:sayName
        }
        
    })()
    var p1 = Person
    p1.sayName()
    
    • 工厂模式
    function person(name,age){
      var obj = {}
      obj.name = name
      obj.age = age
      return obj
    
    }
    
    var p1 = person('Lii',18)
    cosole.log(p1.name,p1.age)
    
    • 单利模式
    var Person = !function(){
        var instance;
        function init(){
            return {
    
            }
        }
    
        return {
            createPerson:function(){
                if(!instance){
                    instance = init()
                }
                return instace
            }
        }
    }()
    
    var p1 = Person.createPerson() 
    var p2 = Person.createPerson() 
    
    • 发布订阅模式
    var xxx = (function(){
        var obj = {}//自定义事件存放
    
        var on = function(evt,handler){//push到数组
            obj[evt] = obj[evt] || [];
            obj[evt].push({
                handler:handler
            })
        }
        var fire = function(evt,args){//形成映射查找
            if(obj[!evt]) return;
    
            for(var i=0;i<obj[evt].length;i++){
                obj[evt][i].handler(args)
            }
        }
    
        return {
            on: on,
            fire: fire
        }
    })()
    
    xxx.on('m-coco',function(data){
        console.log('m-coco1')
    })
    
    xxx.on('m-coco',function(data){
        console.log('m-coco2')
    })
    
    xxx.fire('m-coco')
    
    • 发布订阅demo
    var Event = (function(){
        const obj = {}
    
        const on = (evt,handler)=>{
            obj[evt] = obj[evt] || []
            obj[evt].push({
                handler:handler
            }) 
        };
        const fire = (evt,params)=>{
            if(!obj[evt]) return
            for(var i=0;i<obj[evt].length;i++){
                obj[evt][i].handler(params)
            }
        };
    
        const off = (evt)=>{
            if(obj[evt]){
                delete obj[evt]
            }else{
                console.log('此'+evt+'无效')
            }
     }
            
       return {
            on: on,
            fire: fire,
            off: off
        }
    })()
    
    Event.on('change',(val)=>{
        console.log('change..now val is ' + val)
    })
    
    Event.fire('change','饥人谷')
    Event.off('change')
    

    相关文章

      网友评论

          本文标题:设计模式

          本文链接:https://www.haomeiwen.com/subject/sovssxtx.html