Я думаю, что самое большое беспокойство, что я бы в том, что цель завода чтобы клиентский код создавал производный экземпляр объекта, не зная деталей создаваемого типа (точнее, подробные сведения о том, как создать экземпляр, но если все сделано правильно, вызывающему абоненту не нужно знать ни одного из более тонких детали, выходящие за рамки базового класса).
Использование информации о типе, извлеченной из производного типа, по-прежнему требует, чтобы вызывающий пользователь имел некоторые интимные знания о том, какой тип он хочет создать, что затрудняет обновление и обслуживание. Подменяя тип Enum (или строку, int и т. Д.), Вы можете обновить завод, не обновляя вызывающий код, чтобы знать о новых производных типах.
Я полагаю, можно утверждать, что имя типа может быть прочитано в виде строки из файла конфигурации, базы данных и т. Д. И информации о типе, определенной с помощью Reflections (в .NET) или RTTI (на C++), но Я думаю, что это лучший пример для простого использования строки типа в качестве вашего идентификатора, поскольку он будет эффективно служить той же цели.
Я определенно согласен! Ограничения времени компиляции намного проще применять и упрощать использование. – jeremyalan