我试图用仿制药实现工厂模式。我不知道如果我采取正确带仿制药的工厂模式
interface DocumentValidator<T> {
Boolean validate(Document document, T object)
}
class ShipmentDocumentValidator implements DocumentValidator<Shipment>{
@Override
Boolean validate(Document document, Shipment object) {
return true
}
}
class DocumentValidatorFactory {
static DocumentValidator forClass(Class clazz) {
if (clazz.simpleName.contains('Shipment')) {
return new ShipmentDocumentValidator();
}
}
}
调用代码:
DocumentValidator validator = DocumentValidatorFactory.forClass(Shipment.class)
我不认为我应该依赖于类的名字,但我怎么能以其它方式实现
是的,坏主意检查一个字符串。没有编译时验证,所以如果您不小心键入“Shiqment”而不是“Shipment”,则会得到不正确的结果,并且不会显示警告。我曾经使用一个系统,原始程序员经常围绕硬编码的字符串进行处理,并且发现了代码不正确的情况,因为他们在“运费”,“运费”而不是“运费” capitalizatoin - 如果你错过了差异,他们也是如此)等等。 – Jay