Я не вижу здесь возможности рефакторинга.
Я вижу необходимость в фабрике.Посмотрите "фабричный" шаблон проектирования.
И я вижу код повсюду, например ... (за которым следует условное выражение, в котором создается конкретный экземпляр) _ это огромный совет-off.
По сути, то, что вы хотите сделать, толкает все уродство принятия решения о том, какой класс создавать в одном месте.Во-первых, в вашем примере A и B должны совместно использовать суперкласс или, что еще лучше, реализовать интерфейс, в котором определен public C createC()
.
Фабрика - это не что иное, как класс со статическим методом, который принимает решение окакой экземпляр A или B. создать.
public class SomeFactory {
public static YourInterface make(int someNumber) {
switch (someNumber) {
case 1: return new A();
case 2: return new B();
default:
throw new RuntimeException("unknown type");
}
}
}
Итак, что вы делаете:
YourInterface yi = SomeFactory.make(1);
C c = yi.createC();
Или
C c = SomeFactory.make(1).createC();
И теперь ваш код довольно чистый.Создать новую реализацию SomeInterface?Нет проблем, добавьте его создание на завод, и ваш код все еще работает.Если для вашего приложения make()
дорого, нет проблем, просто сделайте его и используйте его несколько раз.