[英]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.