Certain languages don't have methods as first class objects which can be passed around. In Java, you can pass around a Method object, but it isn't really the full thing, as calling it is not type safe, and is slower than a real method call. Likewise, passing around a Class object in order to identify a static method to use is equally unwieldy.
Therefore, a singleton object can be passed around, and it carries with it the implementation of the method. That allows you to have a variable that effectively references a type-safe fast method, allowing the nearest thing to having methods as first class objects.
1. so you're not only using singletons but you're using them in horrible ways, that's just great
2. to pass your singleton around, you need to know its type. If you know its type, you can just bolt the methods on the type itself and get rid of the useless singleton
No, you don't need to know the singleton's type. You can have several implementations of an interface, each of which is a singleton. Then you have a reference to the interface type, which allows different methods to be selected.
Ah yes, the fabled multisingleton, because once you've dug your hole there's nothing better than filling it with raw sewage, and once you've got a singleton you can fill it up with half a dozen interfaces because reasons.
Therefore, a singleton object can be passed around, and it carries with it the implementation of the method. That allows you to have a variable that effectively references a type-safe fast method, allowing the nearest thing to having methods as first class objects.