Чтобы ответить на вторую часть вашего вопроса, по моему мнению, причина, по которой это лучше, чем ключевое слово 'new', заключается в том, что фабричный метод уменьшает зависимость от конструкторов определенных классов. Используя фабричный метод, вы делегируете создание рассматриваемого объекта кому-либо еще, поэтому вызывающей стороне не нужны знания о том, как создать объект.