我有一个抽象工厂类 StudentValidatorFactory,它应该创建(基于指定的参数)必须注入验证映射的各种 StudentValidator 类实例(参见下面的代码)。
public class StudentValidatorFactory{
public static final int JUNIOR_STUDENT_TYPE = 1;
public static final int SENIOR_STUDENT_TYPE = 2;
public StudentValidator createStudentValidator(int studentType) throws StudentValidatorCreationException{
Map<String,ValidationBean> validationMap = readValiationMapFromPersistentOrCachedStorage(studentType);
switch (studentType){
case JUNIOR_STUDENT:
return new JuniorStudentValidator(validationMap);
case SENIOR_STUDENT:
return new SeniorStudentValidator(validationMap);
}
}
}
public interface StudentValidator{
void validate(Student student) throws StudentValidationException;
}
public class JuniorStudentValidator{
private Map<String, ValidationBean> validationMap;
public JuniorStudentValidator(Map<String,ValidationBean> validationMap){
this.validationMap = validationMap;
}
public void validate(Student student) throws StudentValidationException{
// make use of validation map for apply junior student related validations on the student
}
}
public class SeniorStudentValidator{
private Map<String, ValidationBean> validationMap;
public SeniorStudentValidator(Map<String,ValidationBean> validationMap){
this.validationMap = validationMap;
}
public void validate(Student student) throws StudentValidationException{
// make use of validation map for apply senior student related validations on the student
}
}
我的问题是关于StudentValidatorFactory.createStudentValidator(int studentType)方法是否应该在 create 方法中从持久存储(基于学生类型)读取验证图?否则,工厂是否应该了解/依赖此类实施细节?
如果在创建学生验证器时有一个避免 switch(studentType) 语句的解决方案,我将不胜感激 - 我的想法是拥有一个内部管理的映射并通过反射执行 StudentValidator 具体类实例化。
使用这种技术的优点是验证器更容易测试(通过依赖注入)。