Фактическая фабрика для создания экземпляра выбирается во время выполнения, часто отдельным фабричным загрузчиком класса. Загрузчик может получить необходимую конфигурацию, например, в файле конфигурации xml и прочитайте из него имя класса конкретной фабрики для загрузки.
Само по себе это не очень сложная логика; причина поместить это в класс загрузчика фабрики - возможность многократного использования. В вашем приложении может быть много фабрик, и часто большая часть кода загрузки фабрики довольно похожа, поэтому помещение его в отдельный класс (иерархию) исключает дублирование кода. И, конечно, логика может быть другой и более сложной, чем в этом примере.
например. более динамичный сценарий - указать отображение между кнопками / элементами меню и именами классов в файле xml, а затем в графическом интерфейсе пользователь может изменить фабрику для использования, нажав кнопку / выбрав пункт меню.