2012-11-17 12 views
10

Widziałem to w niektórych projektach, Module Pattern używa zamiast Singleton Pattern i na odwrót.Różne między wzorem modułu a wzorem singletowym?

Chciałbym wiedzieć dokładnie, jaka jest różnica między Module Pattern i Singleton Pattern?

+4

Proszę spojrzeć na to: http://addyosmani.com/resources/essentialjsdesignpatterns/book/#designpatternsjavascript – Teemu

+1

@Teemu Jest to dobry dokument, ale nie wyjaśnia różnic między nimi. –

+0

różne nazwy lub implementacje dla nonsensu? –

Odpowiedz

7

Module pattern w javascript odnosi się do modularyzacji kodu dla wspólnego mechanizmu. Działa całkiem dobrze, aby podzielić jedną "klasę" na kilka plików, ponieważ można samodzielnie zdefiniować konstruktora i różne grupy metod prototypowych. Każdy z modułów jest zazwyczaj zawijany wewnątrz zamknięcia w celu utworzenia statycznych zmiennych lokalnych - jest to nazywane ujawniające wzór modułu.

Singleton pattern w javascript odnosi się do ograniczenia tworzenia instancji, często za pomocą lazy initialisation.

Oczywiście można wziąć pod uwagę, że wzorzec modułu jest specjalizacją wzorca singleton (patrz Wikipedia article), wówczas konstruktor i jego prototypowy obiekt zajmowałby wówczas część "pojedynczego wystąpienia".

Jednak można również łączyć je "niezależnie": moduł, który definiuje klasę, która używa podejścia singleton.

+2

Czy to prawda, że ​​używa się 'Wzorca modułu' jako" wzoru Singletona "? –

+1

Oczywiście, możesz także mieć moduł, który po prostu tworzy jeden obiekt singletonowy, bez żadnych klas (bardziej prototypowe podejście) – Bergi

+0

@Bergi Miałem pytanie do dodania do tego: Wzór 'Utilities.game_manager = {functionName: function() {var1, var2 ...}, ...}; 'ukrywa zmienne tak samo, jak robi to wzorzec Module (tzn. nie pokazuje zmiennych wewnątrz właściwości funkcji' Utilities.game_manager') . Czy istnieje zatem różnica między tym a wzorcem modułu? Chodzi mi o to, że Wzorzec Modułu Odkrywania zwraca funkcje, które mogą odsłonić ukryte zmienne, ale możesz to zrobić za pomocą wzoru, który właśnie pokazałem. – Growler

Powiązane problemy