簡體   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