我正在实施规范模式。 NotSpecification起初看起来很简单:
NotSpecification.IsSpecialCaseOf(otherSpecification)
return !this.specification.isSpecialCaseOf(otherSpecification)
但它并不适用于所有规格:
Not(LesserThan(4)).IsSpecialCaseOf(Equals(5))
这应该返回false而不是true。到目前为止,我认为完成isSpecialCaseOf NotSpecification的唯一方法是实现remainingUnsatisfiedBy(文章中关于规范模式的部分包含)。但也许我错过了一些更简单或逻辑的见解,这使得这不必要。
问题:是否有另一种方法可以通过不使用remainderUnsatisfiedBy实现这一点?
答案 0 :(得分:3)
我试图在Java中实现它,它没有问题,并且restUnsatisfiedBy()。可能你的实现有问题,这是我的:
public boolean isSpecialCaseOf(Specification spec) {
if (spec instanceof GreaterThan) {
return ((GreaterThan) spec).boundary > this.boundary;
}
return false;
}
catch是在Not()方法中,它应该正确地构造其参数的相反类型。
static final Specification Not(Specification spec) {
return spec.not();
}
然后我需要的是为每个规范正确实现not(),例如:对于LesserThan:
@Override
public Specification not() {
return new GreaterThan(boundary);
}
如果您有任何问题,请提供您对GreatherThan.isSpecialCaseOf和Not的实施,我会尽力帮助。