谈谈JS设计模式和应用场景一(单例模式)

什么是单例模式


单例模式是单例模式,也叫单子模式,是一种经常使用的软件设计模式。 在应用这个模式时,单例对象的类必须保证只有一个实例存在。 许多时候整个系统只须要拥有一个的全局对象,这样有利于咱们协调系统总体的行为。。(来源于维基百科)java

1.建立单例模式,案例1:其实就是建立个对象,将咱们的对象看作一我的设计模式

var person ={
    height:1,
    name:'wy',
    callback:function(){
        console.log(person.name);
    },
    func:function(){
      console.log('this is single function')
    }
}

这种建立在业务中使用,这时候会有局限性,this

1.可扩展性差,若是之后在不一样场景复用,如咱们刚刚的类,若是要增长一个width属性,spa

//
    person.width = 1;
    //新增了一个height属性时候
    
    person.height=2
    //就会覆盖了原来的属性

例子明显看的出来,相互影响,耦合度很高,在业务中使用很容易会致使覆盖和重写的可能设计

2.若是咱们想一个类即能被继承,又不会改变公用的属性(方法一)code

var person =function(){
    
    this.height=1;
    this.name='wy'
    this.callback=function(){
        console.log(person.name);
    },
    this.func=function(){
      console.log('this is single function')
    }
    
}

var girl = new person;
var boy = new person;

girl.height = 2;
boy.height = 3;

console.log(boy.height,girl.height);

这样便可以实现多态和继承,相互又是独立的,可是在业务上使用会出现一个问题,就是名字重复时候,会致使全部属性出问题,因而再次扩展实现方式对象

(function(){
    
    var Namespace = Namespace||{};
    Namespace.person = function(){
    
        this.height=1;
        this.name='wy'
        this.callback=function(){
        console.log(person.name);
        },
        this.func=function(){
          console.log('this is single function')
        }
    
    } 

    if(window)
    window.Namespace = Namespace||{};

})(window,undefined)

var person = new Namespace.person;
var person2 = new Namespace.person;
console.log(person.height,Namespace,person)

使用命名空间对不一样开发模块作区分,能有效避免这种状况。继承

相关文章
相关标签/搜索