Вы можете вернуть абстрактный класс. Нет закона о возвращении интерфейсов или абстрактных классов, это зависит от вашего программного обеспечения:
Один из способов вернуть x
, y
, z
- использовать Factory Pattern .
Пример (псевдокод):
public class PQRFactory {
public PQR getPQR(condition) {
switch (condition) {
case condition_x :
return new x();
break;
case condition_y :
return new y();
break;
case condition_z :
return new z();
break;
default : return null;
}
}
}
Если вы не хотите использовать condition
, вы можете использовать шаблон Builder , чтобы делать то, что отправил @JVerstry.
Когда ваши классы реализуют интерфейс ABC
, вы можете использовать шаблон стратегии , чтобы передать фабрику для использования ABC
разработчиками.
Пример (псевдокод):
public abstract class AbstractABC implements ABC {
protected PQRFactory factory;
protected AbstractABC() {
factory = new PQRFactory();
}
protected AbstractABC(PQRFactory factory) {
this.factory = factory;
}
}
public class ABCImpl1 extends AbstractABC() {
//Override constructors needed to construct this class
}
Надеюсь, это поможет.