我有很多布尔变量,最后只有一个应该是真的,顶部变量具有优先级。我不确定是否有特定的词来形容这一点,但我想知道是否有一种更清晰的方式用Java表达这一点?
以下是例子:
boolean a = /*...*/;
boolean b = !a && /*...*/;
boolean c = !a && !b && /*...*/;
boolean d = !a && !b && !c && /*...*/;
boolean e = !a && !b && !c && !d;
因此,只有当a到d为假时,e才为真,只有当a - c为假(且满足d条件)时d才为真,等等。
在Java中有更好的方法吗?有没有一个词可以表达这种逻辑?
答案 0 :(得分:1)
您可以使用责任链设计模式。使用此模式,您可以组装一系列处理对象并将请求传递给它。处理从链的头部开始。当前链对象决定是否处理该命令。如果它不处理命令,它会将它传递给链上的下一个对象。
假设您有4个标准,CA,CB,CC和CD。您将拥有5个处理对象,其中4个对应于这4个标准,而另一个将接受任何内容,即不检查任何条件。
以下是一个改编自https://en.wikipedia.org/wiki/Chain-of-responsibility_pattern
的示例abstract class Processor {
protected Processor successor;
public void setSuccessor(Processor successor) {
this.successor = successor;
}
abstract protected boolean checkCondition(OrderRequest request);
abstract protected void execute(OrderRequest request);
public void processRequest(OrderRequest request){
if(checkCondition(request)) {
execute(request);
} else if(successor != null) {
successor.processRequest(request);
}
}
}
public class CAProcessor extends Processor {
protected boolean checkCondition(OrderRequest request) {
return request.TotalWithVAT > 100 && request.getNPurchasedItems() > 20;
}
protected void execute(OrderRequest request) {
//Here you can call some method, set some instance variable, etc...
request.setTable(1);
}
}
public class DefaultProcessor extends Processor {
protected boolean checkCondition(OrderRequest request) {
return true;
}
protected void execute(OrderRequest request) {
request.setTable(5);
}
}
要组装链,您可以执行类似
的操作Processor ca = new CAProcessor();
Processor cb = new CBProcessor();
...
Processor defaultProcessor = new DefaultProcessor();
ca.setSuccessor(cb);
...
cd.setSuccessor(defaultProcessor);
执行
ca.execute(request);