gpt4 book ai didi

java - 为什么我要在 switch 语句上使用责任链

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:19:31 24 4
gpt4 key购买 nike

假设您获得了多项验证。只有当要检查的对象属于特定类型时,这些验证才会生效。为什么我要在 switch 语句上使用责任链?

责任链示例

public class Executor {

@Inject
private ValidatorFactory validatorFactory;

public void execute(Konfiguration konfig) {
List<Statement> statements = konfig.getStatements();
AbstractValidator validator = validatorFactory.create();
for (Statement statement : statements) {
if (validator.validate(statement.getType())) {
crudService.execute(statement.getSql());
}
}
}

validatorFactory 创建 validator 链。一个 validator 看起来像

public class AddPrimaryKeyValidator extends AbstractValidator {

@Override
public boolean validate(Statement statement) {
if (SqlType.ADD_PK.getTyp().equals(statement.getType())) {
return doesTableAndPrimaryKeyExist(statement.getTabName());
}
return successor.validate(statement);
}

switch 语句示例

public void execute(Konfiguration konfig) {
List<Statement> statements = konfig.getStatements();
for (Statement statement : statements) {
switch (statement.getType()) {
case "ADD_PK":
if (doesTableAndPrimaryKeyExist(statement.getTabName())) {
frepCrudService.execute(statement.getSql());
}
// more cases
}
}
}

最佳答案

因为在责任链中,您不需要预先知道调用者中谁做了什么。决定何时在链中运行代码的逻辑由您拥有,其余代码可以忽略它。这允许在正确的位置封装特定的逻辑。 Servlet 过滤器就是一个很好的例子

关于java - 为什么我要在 switch 语句上使用责任链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33217397/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com