В действительности, если вы хотите получить преимущества фабричного класса, вам нужен статический метод в своем собственном классе. Это позволит вам позже создавать новые фабричные классы или реконфигурировать существующий, чтобы получить другое поведение. Например, один фабричный класс может создавать Unicorns, которые реализуют интерфейс IFourHoovedAnimal. Возможно, у вас написан алгоритм, который работает с IFourHoovedAnimal и нуждается в его создании. Позже вы можете создать новый класс фабрики, который вместо этого создает экземпляры Pegasus, которые также реализуют IFourHoovedAnimal. Старый алгоритм теперь можно повторно использовать для Pegasus, просто используя новую фабрику! Чтобы это работало, PegasusFactory и UnicornFactory должны наследовать от некоторого общего базового класса (обычно абстрактного класса).
Итак, вы видите, поместив статический метод в его собственный фабричный класс, вы можете заменить фабричные классы новыми, чтобы использовать старые алгоритмы. Это также работает для улучшения тестируемости, потому что теперь модульные тесты можно использовать для фабрики, которая создает фиктивные объекты.
Я делал это раньше (статический метод фабрики для класса, экземпляры которого вы создаете) для очень маленьких проектов, но это было только потому, что мне это было нужно, чтобы помочь в рефакторинге какого-то старого кода, но сохранить изменения до минимума. В основном в этом случае я выделил кусок кода, который создал кучу элементов управления ASP.NET, и поместил все эти элементы управления в пользовательский элемент управления. Я хотел сделать свой новый пользовательский элемент управления основанным на свойствах, но старому унаследованному коду было проще создать пользовательский элемент управления с помощью конструктора на основе параметров.
Итак, я создал статический метод фабрики, который взял все параметры, а затем создал пользовательский элемент управления и установил его свойства на основе параметров. В старом унаследованном коде этот статический метод использовался для создания пользовательского элемента управления, а в будущем коде вместо него использовались бы свойства «красивее».