繁体   English   中英

Java - 创建抽象对象的工厂类?

[英]Java - Factory class that creates an abstract object?

我有以下 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实例CarChecker它的抽象。

什么是最好的方法,使用if statement来决定返回什么具体实现? 例如,将“福特”传递给newFrom方法以了解创建 FordChecker 对象?

你可以这样做:

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属于具体类的名称。

您不能创建抽象类的实例(因此,“抽象对象”不是一回事)。

工厂的整个概念是它们代表了创造事物的概念。 因此, 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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM