談談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)

使用命名空間對不一樣開發模塊作區分,能有效避免這種狀況。繼承

相關文章
相關標籤/搜索