例項 模組的Singleton模式

2021-08-17 01:27:09 字數 1317 閱讀 5120

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...