Singleton在GOF設計模式中算是基本的基本,因為結構簡單,很容易就明白,也很容易寫出來。其實用Javascript做Singleton甚至比其他語言更簡單。
結構
用Javascript做出Singleton,其實只要透過匿名函數,透過函數的執行產生所需要的物件,透過適當地安排,就可以讓這個物件只能透過「工廠函數」取得,而且在之後的程式都不會變化。
下面是一個簡單的範例:
(function(){
var ajax = new XMLHttpRequest();
window.getAjax = function() {return ajax;};
})();
結束。
這麼簡單?長得也不像嘛?但是仔細考慮一下,匿名函數內的ajax變數在匿名函數執行時就產生了,只能透過getAjax()函數取得,每次返回的都是同一個物件實體,而且也沒有其他方法產生另一個物件實體(其實有啦,但是如果XMLHttpRequest是在匿名函數內定義的話,從外部也是無法存取的,請想像一下),這就是Singleton了。
應用
需要用Singleton的時機應該不用多說了。Singleton很簡單,所以在初學者應用中常見的問題反而是:不要在不需要的時候使用它。