Java-创建抽象对象的Factory类?

时间:2019-12-18 22:05:27

标签: java constructor static factory abstract

我有以下2个抽象类:

public abstract class AbstractCarChecker implements CarService {

}

以及以下扩展AbstractCarChecker的内容

public abstract class CarChecker<T extends Car> extends AbstractCarChecker {

}

我想要一个工厂类来实例化CarChecker对象,以便所有子类(例如FordCheckerFactory)都可以对其进行扩展以创建实例。

public class CarCheckerFactory {

    public CarCheckerFactory() { }

    public static CarChecker newFrom(String carName, String carReg) {

        CarChecker carChecker = new CarChecker(carName, carReg);

        return carChecker;
    }

}

但是问题是我无法实例化CarChecker作为其摘要。

最好的方法是什么,使用if statement决定要返回的具体实现?例如将{ford“传递到newFrom方法中以了解是否创建了FordChecker对象?

2 个答案:

答案 0 :(得分:0)

您无法创建抽象类的实例(因此,“抽象对象”根本不是问题)。

工厂的整个概念是,它们代表创造事物的概念。因此,newFrom方法不应是静态的(因为它可能也曾经是构造函数,而工厂作为一个概念是没有用的;工厂起着使构造函数具有多态性的作用,就像实例方法一样)能够)。因此:

public interface CarCheckerFactory<T extends Car> {
    CarChecker<T> newFrom(String carName, String carReg);
}

public class FordCheckerFactory implements CarCheckerFactory<Ford> {
    return new FordChecker(carName, carReg);
}

答案 1 :(得分:0)

您可以执行以下操作:

public static CarChecker newFrom(String carName, String carReg, String className) {
    Class<?> theClass = Class.forName(className);
    Constructor<?> cons = theClass.getConstructor(String.class,String.class);
    CarChecker carChecker = cons.newInstance(new Object[] {carName, carReg });
    return carChecker;
}

其中className与具体类的名称有关。