The Google Testing blog has a series of entries about avoiding Singleton (in order to create testable code). Maybe this can help you:
- Using dependency injection to avoid singletons
- Singletons are Pathological Liars
- Root Cause of Singletons
- Where have all the Singletons Gone?
The last article explains in detail how to move the creation of new objects into a factory, so you can avoid using singletons. Worth reading for sure.
In short we move all of the new operators to a factory.
We group all of the objects of similar lifetime into a single factory.