singleton模式指的是呼叫乙個類,任何時候返回的都是同乙個例項。
對於node來說,模組檔案可以看成是乙個類,怎麼保證每次執行這個模組檔案,返回的都是同乙個例項呢?
很容易想到,可以把例項放到頂層物件global
。
// mod.js
function a()
if (!global._foo)
module.exports = global._foo;
然後,載入上面的mod.js
。
const a = require('./mod.js');
console.log(a.foo);
上面**中,變數a
任何時候載入的都是a
的同乙個例項。
但是,這裡有乙個問題,全域性變數global._foo
是可寫的,任何檔案都可以修改。
global._foo = ;
const a = require('./mod.js');
console.log(a.foo);
上面的**,會使得載入mod.js
的指令碼都失真。
為了防止這種情況出現,我們就可以使用 symbol。
// mod.js
const foo_key = symbol.for('foo');
function a()
if (!global[foo_key])
module.exports = global[foo_key];
上面**中,可以保證global[foo_key]
不會被無意間覆蓋,但還是可以被改寫。
global[symbol.for('foo')] = ;
const a = require('./mod.js');
如果鍵名使用symbol
方法生成,那麼外部將無法引用這個值,當然也就無法改寫。
// mod.js
const foo_key = symbol('foo');
// 後面**相同 ……
上面**將導致其他指令碼都無法引用foo_key
。但這樣也有乙個問題,就是如果多次執行這個指令碼,每次得到的foo_key
都是不一樣的。雖然 node 會將指令碼的執行結果快取,一般情況下,不會多次執行同乙個指令碼,但是使用者可以手動清除快取,所以也不是絕對可靠。 單例項模式 Singleton
單例項模式 singleton 最近乙個人好無聊想寫點東西,正好剛學了點設計模式,覺得singleton這個詞最能引起我的共鳴 single乙個人,ton好多人,街道上人潮襯托我的孤單,想象,誰幸運陪在你身旁,卻誤會一場,你也在等你手機響 暈了,閒話少說,步入正題。建立singleton模式的目的是...
Singleton 單例項 模式
在某些情況下 特定型別的資料需要提供給應用程式中的其他所有物件使用。在大多數情況下,這種型別的資料在系統中還是唯一的。如何使物件例項全域性可用,並保證僅建立乙個此類的例項?singleton 通過下列方法提供唯一的全域性例項 1.讓類建立自己的唯一例項。2.允許其他物件通過可返回例項引用的類方法來訪...
JAVA中的單例設計(Singleton)模式
一 單例模式有以下特點 1 單例類只能有乙個例項。2 單例類必須自己建立自己的唯一例項。3 單例類必須給所有其他物件提供這一例項。二 懶漢式 懶漢式單例類 在第一次呼叫的時候例項化自己 public class singleton private static singleton single nu...