The programming community discourages using global data and objects. Still, there are times when an application needs a single instance of a given class and a global point of access to that class. The general solution is the design pattern known as singletons. However, singletons are unnecessarily difficult to test and may make strong assumptions about the applications that will use them. In this article I discuss strategies for avoiding the singleton pattern for that majority of cases where it is not appropriate. I also describe the properties of some classes that are truly singletons.
Old, but very good article on Singleton (and OO) misunderstand/misuse. From my opinion, a second edition (e.g. "Patterns revisited") of the Patterns book is necessary, though it's horrible that Mr. Vlissides has passed away.