The Singleton
pattern is mostly considered an *anti*-pattern now. Static creation makes it difficult to
test and, if suddenly the class doesn't need to be a singleton anymore, requires lots of changes, because you have to change how all the users of the class get the reference.
Dependency injection can create singleton objects in an application through only configuration. The DI container handles the creation of classes and passing references to users of the class around - so the class doesn't need to define static creation methods; and users of the class don't have to know it's a singleton to get a reference, it's reference is just passed to the class like any other dependency.