Different between Module Pattern and Singleton Pattern?
Asked Answered
S

1

13

I've seen that in some projects, Module Pattern uses instead of Singleton Pattern and vice versa.

I want to know exactly, what's the different between Module Pattern and Singleton Pattern?

Seeress answered 17/11, 2012 at 9:4 Comment(3)
Please take a look at this: addyosmani.com/resources/essentialjsdesignpatterns/book/…Avilla
@Avilla This is a good document but it's not clarify the different between those.Seeress
different names or implementations for nonsense?Drill
A
8

Module pattern in javascript refers to the modularisation of code for a common mechanism. It works quite well to split one "class" across several files as you can define constructor and various groups of prototype methods independently. Each of the modules is usually wrapped inside a closure to create static, local variables - this is called revealing module pattern.

Singleton pattern in javascript refers to the restriction of instance creations, often using lazy initialisation.

Of course you can consider the module pattern to be a specialisation of the singleton pattern (see the Wikipedia article), the constructor and its prototype object would take the part of the "single instance" then.

Yet you also could combine them "independently": A module that defines a class which uses the singleton approach.

Adelbert answered 17/11, 2012 at 14:1 Comment(6)
So, is that correct to use Module Pattern as a Singleton Pattern?Seeress
Sure, you can also have a module that just creates one singleton object, without any classes at all (the more prototypical approach)Adelbert
@Adelbert I had a question to add on to this: The pattern Utilities.game_manager = { functionName: function() { var1, var2... }, ... }; hides the variables just as much as the Module pattern does (i.e., it doesn't show the variables inside the function property of Utilities.game_manager). Is there then a difference between this and the Module pattern? I mean, the Revealing Module Pattern returns functions that can expose the hidden variables, but you can do that with the pattern I just showed.Perjury
@Growler In the (revealing) module pattern, the module variables are static and persist across method invocations. You just have a function with local variables.Adelbert
It works quite well to split one "class" across several files as you can define constructor and various groups of prototype methods independently. What does the module pattern have to do with prototypes and constructors ? could you show me an example ?Unreflective
@Taurus Nothing specific. I just can be used to put together a prototype object from multiple places, but it can be used for any other objects as well.Adelbert

© 2022 - 2024 — McMap. All rights reserved.