You ideally want a clean architecture that meets the requirements for the project.Use patterns wisely -- not everything is a factory (or you end up with things like the ISillyIteratorFactoryFactory).Use classes wisely -- not everything in C++ needs to be in a class.