I am not totally against Singleton design pattern. However, based on experience, normally if there is Singleton design pattern in your application, you should carefully study your code. Usually there is always a better way of doing it other than using Singleton design pattern.
Consider the following code snippet I encountered for one of the legacy Java applications.
This piece of code was written few years back by someone who was no longer in the project. Recently this piece of code became the performance bottleneck for the entire application.
The Singleton database access class means that there will be only 1 instance shared by all threads. Since this is a multi-threaded application, the method is synchronized. When the load is high, the method becomes the bottleneck for performance. It took us quite awhile just to find out the root cause of this.
If you want to use Singleton design pattern in your application, think twice and use it if you think there is no other way out.