I know of 2 ways to implement the singleton pattern in java and im wondering which one is better and why.
the first way is:
- declare the constructor of the class private
- have everything inside the class static – basiclly have the class instance itself be the singleton
second way is:
- declare the constructor of the class private
- have a static member to hold the singleton (which may be an instance of the class)
- have a static getInstance() method
I tend to think that even though the second approach is the most common, the first approach may produce better code readability, both approaches seem similiarly efficient in runtime complexity, so i dont really get the reasons behind why the second approach is way more common and considered better practice…
enlighten me!
The first approach is not a singleton. A singleton is a class of which precisely one instance, no more, no less, can exist. The first thing is sometimes called a “static class”, a “utility class,” or an “uninstantiable class.”
There are a number of things that you can do with a “real” singleton that you can’t do with a utility class. For example, you can have a singleton that implements an interface or extends another class; you can’t do that with the all-static-methods thing. The all-static-methods class is generally evidence that no object oriented design analysis was done
As far as how many ways there are to implement the singleton pattern in Java, there are actually quite a number of interesting ways, using different language features to defer initialization until absolutely needed: class loading, enumerations, or just a synchronized block and an
if.