javaScript設計模式與開發實踐(一)單例模式

來源:互聯網
上載者:User

標籤:body   function   display   代理   匿名函數   innerhtml   turn   onclick   使用   

 

單例模式定義:保證一個類僅有有一個執行個體,並提供一個訪問它的全域訪問點。

應用情境:有一些對象只需要一個。如線程池、全域緩衝、瀏覽器中的window對象等。

 

實現一:

var Singleton = function(name) {  this.name = name;  this.instance = null;       }Singleton.prototype.getName = function() {  alert(this.name);};Singleton.getInstance = function() {  if(!this.instance) {    this.instance = new Singleton(name);  }  return this.instance;};var a = Singleton.getInstance(‘sven‘);

 實現一的缺點:增加了這個“類”的不透明性,使用者必須知道這是一個單例類,跟以往通過new的方式擷取對象不同。

 

實現二:

var CreateDiv = (function(){  var instance;  var CreateDiv = function(html) {    if(instance)      return instance;    this.html = html;    this.init();    return instance = this;  };  CreateDiv.prototype.init = function(){    var div = document.createElement(‘div‘);    div.innerHTML = this.html;    document.body.appendChild(div);  };  return CreateDiv;})();var a = new CreateDiv(‘sven‘);

 實現二的缺點:使用了自執行的匿名函數和閉包,並讓匿名函數返回了真正的Singleton構造方法,增加了程式複雜度。

 

實現三:用代理實現單例模式

  var CreateDiv = function(html) {    this.html = html;    this.init();  };  CreateDiv.prototype.init = function(){    var div = document.createElement(‘div‘);    div.innerHTML = this.html;    document.body.appendChild(div);  };  var ProxySingletonCreateDiv = (function(){        var instance;    return function(html) {      if(!instance) {        instance = new CreateDiv(html);      }         return instance;    };  })();  var a = new ProxySingletonCreateDiv(‘sven‘);

 實現三將負責管理單例的邏輯移到了代理類中。這樣一來,將CreateDiv和ProxySingletonCreateDiv組合起來就可實現單例模式。

 

實現四:惰性單例(需要時才建立對象執行個體) 重點

var createLoginLayer = (function(){  var div;  return function() {    if(!div) {      div = document.createElement(‘div‘);      div.innerHTML = ‘我是登入視窗‘;      div.style.display = ‘none‘;      document.body.appendChild(div);    }    return div;  };})();document.getElementById(‘loginBtn‘).onclick = function(){  var loginLayer = createLoginLayer();  loginLayer.style.display = ‘block‘;};

 

javaScript設計模式與開發實踐(一)單例模式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.