I suggest reading this article: http://www.codinghorror.com/blog/2005/09/head-first-design-patterns.html
key part: The best way to learn how to write simple code is to write simple code! Templates, like all forms of complexity, should be avoided until they become absolutely necessary. . The first thing that beginners need to start. Not the last.
I agree with this - you need a factory only if you really need to.
Well, returning to the topic, the new keyword may be evil, but in most cases it certainly is not and should not be a source of headache. Seeing
List <Person> persons = new ArrayList<Person>();
Excellent. Don't even dare think of a factory by creating an ArrayList or LinkedList . It will be completely overloaded.
"I saw many systems that used the factory pattern. For example, if every object in the system is created using Factory instead of a direct instance (for example, a new StringNode (γ)), the system probably has an excess of plants." @ Joshua Kerievsky
Do not add templates prematurely if you are not sure if this is a good idea, and you cannot be sure of it without enough experience. Starting to write code with patterns in your mind - view: Factory, that's great, let's see when I can post it! - This is not a good idea:). It will be better to add patterns to places in your code that are unpleasant when you feel (smell :) - smell of code) that this can be done somehow better. This is refactoring for templates .
There is a wonderful book about this, and I will give you a link to the chapter " Move knowledge creation to Factory "
http://www.informit.com/articles/article.aspx?p=1398606&seqNum=2
I know this for a long time, but please read it, it is definitely worth the effort