我正在尝试使用工厂模式来创建 QuestionTypeFactory,其中实例化的类将类似于 MultipleChoice、TrueFalseQuestion 等。
工厂代码看起来像这样
class QuestionFactory {
public enum QuestionType {
TrueFalse,
MultipleChoice,
Essay
}
public static Question createQuestion(QuestionType quesType) {
switch (quesType) {
case TrueFalse:
return new TrueFalseQuestion();
case MultipleChoice:
return new MultipleChoiceQuestion();
case Essay:
return new EssayQuestion();
}
throw new IllegalArgumentException("Not recognized.");
}
}
现在这工作正常。如果我想添加另一个问题类型,我需要修改工厂类,我不想这样做。
如何设置它,以便每个问题类都向工厂注册,这样当我添加新的问题类型时,我不必更改工厂的代码?我对java有点陌生,不知道该怎么做。
编辑
附加信息
所有的问题类都实现了一个 IQuestion 接口。我正在寻找一种方法来实现类似的方法
public static void registerType(QuestionType quesType, Class<IQuestion> ques)
这样我就可以从我的类的静态块中调用这个方法,这样当我添加一个新的问题类型时,我就不必在问题工厂中更改或添加任何代码。我知道我必须更改当前的实现以使其通用。我不确定我上面写的方法在语法上是否正确,但它显示了我想要的概念。