There could be a few reasons for using factories. One is when the exact class to instantiate can vary depending on runtime information. For example, let's pretend you have a variety of "Clean" classes, such as HtmlClean, JavaScriptClean, and SqlClean (though, I would name these as a noun "Cleaner" rather than as a verb).