單例模式是單例模式,也叫單子模式,是一種經常使用的軟件設計模式。 在應用這個模式時,單例對象的類必須保證只有一個實例存在。 許多時候整個系統只須要擁有一個的全局對象,這樣有利於咱們協調系統總體的行爲。。(來源於維基百科)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)
使用命名空間對不一樣開發模塊作區分,能有效避免這種狀況。繼承