Назначение
Определяет интерфейс для создания объекта, но оставляет подклассам решение о том, какой класс инстанцировать. Фабричный метод позволяет классу делегировать инстанцирование подклассам.
Использование шаблона в JDK
(примеры частично взяты с этого ресурса)
java.lang.Integer#valueOf(String) (также у Boolean, Byte, Character, Short, Long, Float и Double)
java.lang.Class#forName(String)