2012-11-17 9 views
10

Ho visto che in alcuni progetti, Module Pattern utilizza invece di Singleton Pattern e viceversa.Differenti tra Pattern modulo e Pattern Singleton?

Voglio sapere esattamente, qual è la differenza tra Module Pattern e Singleton Pattern?

+4

prega di dare un'occhiata a questo: http://addyosmani.com/resources/essentialjsdesignpatterns/book/#designpatternsjavascript – Teemu

+1

@Teemu Questo è un buon documento, ma non è chiarire la differenza tra quelli. –

+0

nomi diversi o implementazioni per sciocchezze? –

risposta

7

Module pattern in javascript si riferisce alla modularizzazione del codice per un meccanismo comune. Funziona piuttosto bene per dividere una "classe" su più file, in quanto è possibile definire in modo indipendente il costruttore e vari gruppi di metodi prototipo. Ciascuno dei moduli è solitamente racchiuso all'interno di una chiusura per creare variabili locali statiche - questo è chiamato modello di modulo rivelatore.

Singleton pattern in javascript si riferisce alla restrizione delle creazioni di istanza, spesso utilizzando lazy initialisation.

Naturalmente è possibile considerare il modello di modulo come una specializzazione del modello singleton (vedere lo Wikipedia article), il costruttore e il suo oggetto prototipo prenderebbero quindi la parte della "singola istanza".

Tuttavia, è possibile combinarli "indipendentemente": un modulo che definisce una classe che utilizza l'approccio Singleton.

+2

Quindi, è corretto usare 'Pattern Module' come' Singleton Pattern'? –

+1

Certo, puoi anche avere un modulo che crea solo un oggetto singleton, senza alcuna classe (l'approccio più prototipo) – Bergi

+0

@Bergi Ho avuto una domanda da aggiungere a questo: Il pattern 'Utilities.game_manager = {functionName: function() {var1, var2 ...}, ...}; 'nasconde le variabili tanto quanto fa il modello del modulo (cioè, non mostra le variabili all'interno della proprietà function di' Utilities.game_manager') . C'è quindi una differenza tra questo e il modello del modulo? Voglio dire, il Revealing Module Pattern restituisce funzioni che possono esporre le variabili nascoste, ma puoi farlo con lo schema che ho appena mostrato. – Growler