2015年5月21日 星期四

Javascript的單例 ( Singleton in JavaScript )

單例(Singleton)的定義:
Singleton 模式可以保證一個類別只有一個實例,並提供一個訪問(visit)這個實例的方法。


javascript大致分為三個方式可以實做Singleton:
1.將instance用全域變數宣告(不推薦)
2.將instance儲存於靜態屬性中(一般)
3.將instance儲存於Closure中(較佳)

一般類別使用情況如下,每次呼叫都會建立一個新的instance。

function Person() {  
 Person.instance = this;
 return Person.instance;
}

var person_1 = new Person();
var person_2 = new Person();
console.log( person_1 === person_2 ); //false


2.儲存於靜態屬性中的實體
-缺點:instance是public,可能不小心更動到instance中的資料
function PersonSingleton() {
 if( typeof PersonSingleton.instance === 'object' ){
  return PersonSingleton.instance;
 } 
 PersonSingleton.instance = this;

 return Person.instance;
}

var person_3 = new PersonSingleton();
var person_4 = new PersonSingleton();
console.log( person_3 === person_4 ); //true


3.使用closure包護為一實體
function PersonClosureSingleton() {
  var instance;
  
  //重新定義建構式
  PersonClosureSingleton = function(){
    return instance;
  };
  
  //附上原型屬性
  PersonClosureSingleton.prototype = this;
  
  //建立實體
  instance = new PersonClosureSingleton();
  
  //重設建構式指標
  instance.constructor = PersonClosureSingleton;
  
  return instance;
}

console.log( PersonClosureSingleton );
var person_5 = new PersonClosureSingleton();
console.log( PersonClosureSingleton );
var person_6 = new PersonClosureSingleton();

console.log( person_5 === person_6 ); //true


Ref:
http://www.books.com.tw/products/0010538538

0 意見:

張貼留言