Прежде всего, вы забыли основную цель фабричного шаблона, я открыл книгу банды четырех, и там говорится:
"Определите интерфейс для создания объекта, но пусть подклассы решают, какой класс создать, например. Фабричный метод позволяет классу отложить создание экземпляров для подклассов."
Это означает, что на самом деле вы определяете интерфейс, поэтому SomeFactoryImpl
должен фактически реализовывать интерфейс, определенный где-то еще. Это удобно, когда у вас есть много объектов, которые нужно создать, но вы не хотите заботиться о том, какого типа они объекты. Например, я использовал их для разработки приложения удаленного свинга, в которое клиент загружал через сериализацию определение некоторых классов, которые не существуют в клиентской виртуальной машине. Каждый класс определил подкласс JPanel, который является его специфическим представлением, но при достижении клиента я должен был найти способ истолковать эти классы, не зная их, поэтому я использовал фабричный шаблон для вызова фабричного класса и позволил ему создать экземпляр моего неизвестного объекта (через него расширяет подкласс JPanel, определенный мной).
Другим примером может быть создание объекта для конкретного случая в соответствии с вашими потребностями. Например (как указано на странице википедии, связанной с этим шаблоном проектирования), вы можете представить себе фабрику, которая создает объект, а затем другую фабрику для того же типа объекта, но используемую для генерации «поддельных объектов», которые не пройдут какое-то модульное тестирование.
Однако вы можете решить свою конкретную проблему и статическими методами, но подумайте о разделении части, которая генерирует элементы, из части, которая использует их в большом проекте. Конечно, тот, кто разрабатывает клиентскую часть, должен просто знать, какой интерфейс фабрики используется, и знать только это, чтобы использовать все объекты, определенные в другой части.
Шаблон создания является своего рода шаблоном «средства», используемым просто для определения пользовательских версий конструкторов, не беспокоясь о стандартном определении (имеющем имя метода, равное имени класса), но это ничто специальный. Просто другой способ искажать объекты. Шаблон создания на самом деле не решает какую-либо конкретную проблему (исключая конструкторы с одинаковым числом и видом аргументов).