Ok, I can see some benefits of that. But really, what's the point? I've decided that I like having a few globals. Simply pointers to the core components of the system.
If you have all the factory methods in one place, one base class for example, that class depends on all of those component's, and if you ever want to include that class you'll have to include all of those component's header files as well.
If you split those methods up, that works. But seriously, what's the point? It just adds confusion in my opinion. In my system right now I have main header files for each part of the system, like AXGraphics, AXCore, AXSound, etc. In each one of these main headers, an extern global pointer is declared, such as:
extern AXRenderer *AXAppRenderer;
in AXCore, when the system is initializing, it declares all of these pointers and initializes them to an appropriately initialized object.
So, when you include AXGraphics.h, you can use AXAppRenderer and the appropriate renderer will be used. Why not do it this way? For my system, there should only be one renderer, one window, etc, so those are singletons, therefore it's not like you can screw up the system by creating a new one and pointing the global pointer to it.
Plus, I hate doing stuff like AXRenderer::Instance().Method(). I just hate it.
Not saying it's the best way, but it's just what I'm thinking right now. Thoughts?