2012-11-17 12 views
10

Ich habe gesehen, dass in einigen Projekten Module Pattern statt Singleton Pattern verwendet und umgekehrt.Unterschiede zwischen Modul Pattern und Singleton Pattern?

Ich möchte genau wissen, was ist der Unterschied zwischen Module Pattern und Singleton Pattern?

+4

Bitte werfen Sie einen Blick auf diese: http://addyosmani.com/resources/essentialjsdesignpatterns/book/#designpatternsjavascript – Teemu

+1

@Teemu Dies ist ein gutes Dokument, aber es ist nicht klar, die Unterschiede zwischen diesen. –

+0

verschiedene Namen oder Implementierungen für Unsinn? –

Antwort

7

Module pattern in Javascript bezieht sich auf die Modularisierung von Code für einen gemeinsamen Mechanismus. Es funktioniert ziemlich gut, eine "Klasse" auf mehrere Dateien aufzuteilen, da Sie Konstruktor und verschiedene Gruppen von Prototyp-Methoden unabhängig voneinander definieren können. Jedes der Module ist normalerweise innerhalb eines Abschlusses eingeschlossen, um statische, lokale Variablen zu erzeugen - dies wird genannt und zeigt das Modulmuster.

Singleton pattern in Javascript bezieht sich auf die Beschränkung von Instanz-Kreationen, oft mit lazy initialisation.

Natürlich kann man das Modulmuster als Spezialisierung des Singleton-Musters betrachten (siehe Wikipedia article), der Konstruktor und sein Prototyp-Objekt würden dann den Teil der "Einzelinstanz" nehmen.

Sie könnten sie aber auch "unabhängig" kombinieren: Ein Modul, das eine Klasse definiert, die den Singleton-Ansatz verwendet.

+2

Also, ist es richtig, 'Module Pattern' als' Singleton Pattern' zu verwenden? –

+1

Sicher, Sie können auch ein Modul haben, das nur ein Singleton-Objekt erstellt, ohne irgendwelche Klassen (der prototypische Ansatz) – Bergi

+0

@Bergi Ich hatte eine Frage, die hinzugefügt werden soll: Das Muster 'Utilities.game_manager = {functionName: function() {var1, var2 ...}, ...}; 'verbirgt die Variablen genauso wie das Modul-Muster (dh es zeigt nicht die Variablen innerhalb der Funktionseigenschaft von' Utilities.game_manager') . Gibt es dann einen Unterschied zwischen diesem und dem Modulmuster? Ich meine, das Revealing Module Pattern gibt Funktionen zurück, die die versteckten Variablen offen legen können, aber Sie können das mit dem Muster tun, das ich gerade gezeigt habe. – Growler

Verwandte Themen