Я думал о том же. В моем случае обилие фабрик вызвано «сборкой для проверки». Например, у меня есть такой конструктор:
ParserBuilderFactoryImpl(ParserFactory psF) {
...
}
Здесь у меня есть парсер - конечный класс, который мне нужен.
Парсер создается путем вызова методов на компоновщике.
Сборщики (новые для каждого анализатора, который должен быть собран) получены с фабрики сборщиков.
Теперь, что же это за ParserFactory? Ах, я рад, что вы спросили! Чтобы протестировать реализацию компоновщика синтаксического анализатора, мне нужно вызвать его метод и посмотреть, какой именно синтаксический анализатор был создан. Единственный способ сделать это без нарушения инкапсуляции конкретного класса синтаксического анализатора, который создает построитель, - это поместить точку перехвата непосредственно перед созданием синтаксического анализатора, чтобы увидеть, что входит в его конструктор. Следовательно ParserFactory. Для меня это просто способ наблюдать в модульном тесте то, что передается конструктору парсера.
Я не совсем уверен, как решить эту проблему, но у меня есть ощущение, что нам лучше было бы обходить классы, а не фабрики, и Java будет лучше, если бы в ней были правильные методы классов, а не статические члены. 1008 *