2012-11-17 53 views
10

我已經看到,在一些項目中,Module Pattern使用而不是Singleton Pattern,反之亦然。模塊模式和單例模式有什麼不同?

我想知道確切的是,Module PatternSingleton Pattern之間有什麼不同?

+4

請看看這個:http://addyosmani.com/resources/essentialjsdesignpatterns/book/#designpatternsjavascript – Teemu

+1

@Teemu這是一個很好的文檔,但它沒有闡明這兩者之間的不同。 –

+0

不同的名字或實現廢話? –

回答

7

javascript中的Module pattern指的是用於通用機制的代碼的模塊化。它可以很好地將一個「類」分成幾個文件,因爲您可以獨立定義構造函數和各種原型方法組。每個模塊通常被包裝在一個閉合內部以創建靜態局部變量 - 這稱爲揭示模塊模式

Singleton pattern javascript中指的是實例創建的限制,通常使用lazy initialisation

當然,您可以將模塊模式視爲單例模式的特化(請參閱Wikipedia article),然後構造函數及其原型對象將採用「單實例」的一部分。

然而,你也可以將它們「獨立」組合:定義一個使用單例方法的類的模塊。

+2

那麼,使用'Module Pattern'作爲'Singleton Pattern'是否正確? –

+1

當然,你也可以有一個模塊,只創建一個單例對象,根本沒有任何類(更原型的方法) – Bergi

+0

@Bergi我有一個問題要添加到此:模式'Utilities.game_manager = {functionName: function(){var1,var2 ...},...};'隱藏變量就像Module模式一樣多(即它不顯示'Utilities.game_manager'的function屬性中的變量) 。這與模塊模式有區別嗎?我的意思是,揭示模塊模式返回可以暴露隱藏變量的函數,但您可以使用我剛纔展示的模式來實現。 – Growler