Java - 创建抽象对象的工厂 class?
Java - Factory class that creates an abstract object?
我有以下 2 个摘要 classes:
public abstract class AbstractCarChecker implements CarService {
}
以及下面扩展 AbstractCarChecker
public abstract class CarChecker<T extends Car> extends AbstractCarChecker {
}
我想要一个工厂 class 来实例化 CarChecker 对象,以便所有子 class 对象(例如 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
来决定 return 的具体实现?例如将 "ford" 传递到 newFrom
方法中知道创建 FordChecker 对象吗?
您不能创建抽象 类 的实例(因此,'abstract object' 根本不是问题)。
工厂的整个概念就是它们代表了创造事物的概念。因此,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);
}
您可以按照以下方式进行:
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
属于混凝土的名称 class。
我有以下 2 个摘要 classes:
public abstract class AbstractCarChecker implements CarService {
}
以及下面扩展 AbstractCarChecker
public abstract class CarChecker<T extends Car> extends AbstractCarChecker {
}
我想要一个工厂 class 来实例化 CarChecker 对象,以便所有子 class 对象(例如 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
来决定 return 的具体实现?例如将 "ford" 传递到 newFrom
方法中知道创建 FordChecker 对象吗?
您不能创建抽象 类 的实例(因此,'abstract object' 根本不是问题)。
工厂的整个概念就是它们代表了创造事物的概念。因此,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);
}
您可以按照以下方式进行:
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
属于混凝土的名称 class。