【发布时间】:2020-02-17 20:55:40
【问题描述】:
我正在尝试使用抽象类重构一个类,并试图了解我的方法是否正确。
对于我收到的每个对象,我都有一个基本验证器,它执行一些基本检查,然后有一个自定义验证器,它根据对象类型执行一些额外的验证。我觉得这是对抽象类的一个很好的使用。
public abstract class Validator {
BaseValidator baseValidator;
abstract void customValidation();
void validateObject() {
baseValidator.validate(getInputObject());
customValidation();
}
abstract String getInputObject();
}
public TypeAValidator extends Validator {
@Override
public void customValidation() {
//Do something with getInputObject();
}
@Override public String getInputObject() {
return "someInput";
}
}
我不认为将每个输入都作为 getter 的一部分似乎是正确的方法。如果我采用非抽象类方法,我会这样做:
public TypeAValidator {
BaseValidator baseValidator;
public void validateObject(String inputObject) {
baseValidator.validate(inputObject);
customValidation(inputObject);
}
}
使用这种方法,我需要做的就是调用typeAValidator.validateObject(inputObject),而无需每次都创建TypeAValidator 的新实例,而我需要使用抽象类方法来执行此操作。我为抽象类建模的方式有问题吗?
【问题讨论】:
-
我不确定我是否正确理解了您的问题,如果我错了,请纠正我。您想为特定类型的数据实现 Validator,并且必须对每种类型共同执行一些检查,所以您想将这些检查委托给一个公共基类?
-
@JanHeld 是的,没错。我也只想创建一个 TypeAValidator 实例。
-
好的,您是否有多个子类需要检查,例如ClassA 的子类 ClassB 和 ClassC 以及 ClassB 的 TypeValidator 与 ClassC 的 TypeValidator 不同,但都共享 BaseValidator 中实现的公共检查?
-
一般每个TypeValidator只需要检查一个类型。
-
好的,希望最后一个问题:要检查的类是否共享一些公共基类?所以 BaseValidator 可以检查 BaseClass 中的所有内容,TypedValidatorA 检查 SubClassA 中的所有内容,TypedValidatorB 检查 SubClassB 中的内容,或者要检查的类如何相关?
标签: java oop abstract-class