Лучший способ сделать это, чтобы избежать этого.
Класс должен иметь четко определенный, как можно более последовательный, набор обязанностей.Если все эти классы существуют, это, безусловно, потому, что каждый из них имеет другой набор обязанностей, чем другие.Почему бы вам не позволить вызывающей стороне выбрать подходящий класс для использования и вызвать соответствующий метод из этого класса.
Вы можете использовать свой класс Library
в качестве фабрики вспомогательных классов.Вызывающие абоненты должны были бы просто сделать
library.getClass1().method1(...);
Если вы введете настоящие имена, это станет более естественным:
library.getProductManager().createProduct();
Но даже в этом случае добавление определенных зависимостей в объект вызывающей стороны выглядит лучшедля меня, чем полагаться на такую огромную фабрику.Используйте инфраструктуру внедрения зависимостей, такую как Spring или Guice.