js單例模式總結

首先,單例模式的定義 是:保證一個類僅有一個實例,並提供一個訪問它的全局訪問點。

案例:

我們拿水果店來舉例,首先創建一個水果店的類,保證不論多少次調用都只會創建一個水果店的實例

var Fruit = function( name ){
	this.name = name;
};

Fruit.prototype.getName = function(){
  console.log( this.name );
};

Fruit.getInstance = (function(){
  var instance;
  return function( name ){
    if ( !instance ) {
      instance = new Fruit( name );
    }
    return instance;
  }
})();

var f1 = Fruit.getInstance( 'f1' );
var f2 = Fruit.getInstance( 'f2' );
f1.getName(); // f1
f2.getName(); // f1

總結:

下面把單例模式的通用邏輯抽離出來,作爲一個通用的模式來使用,可以傳入任意的類,我們都會返回這個類的唯一實例。

var getSingleInstance = function( fn ) {
  var result;
  return function(){
    if ( !result ) {
      result = fn.apply( this, arguments );
    }
    return result;
  }
};

var fruit = function( name ){
  var shop = document.createElement( 'div' );
  shop.innerHTML = '程序員開了家水果店';
  document.body.appendChild( shop );
  return shop;
};

var shop = getSingleInstance( fruit );
shop();
shop();
shop();

雖然我執行了三次shop(),但你會發現頁面中只會創建一個“店”,那這就是通用單例模式了,實例只會被創建一次。

發佈了28 篇原創文章 · 獲贊 6 · 訪問量 2016
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章