This is the most popular single guy in the neighborhood. Everybody knows him, everybody talks about him, and anybody can find him easily.
Even people who will frown when other design patterns are mentioned will know it by name. At some point, it was even proclaimed an anti-pattern, but only because of its wide popularity. So, for those who are hearing about it for the first time, what is this pattern about?
Usually, if you have an object, you can create as many of its instances as you want. Say, for example, you have the Cat class:
class Cat
You can produce as many of its instances (cats, to be precise), as you want:
val firstCat = Cat()
val secondCat = Cat()
val yetAnotherCat = Cat()
And there's no problem with that.
What if we wanted to disallow such behavior? Clearly, we have to create an object in some way for the first time. But from the second time on, we...