Warum sollte ich eine Verantwortungskette über eine switch-Anweisung verwenden?

Consider hast du mehrere Validierungen. Diese Validierungen sollten nur wirksam werden, wenn das zu inspizierende Objekt von einem bestimmten Typ ist. Warum sollte ich eine Verantwortungskette gegenüber einer switch-Anweisung verwenden?

Beispiel mit Verantwortungskette

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());
        }
    }
}

Die validatorFactory erstellt die Kette von Validatoren. Ein Validator würde wie folgt aussehen:

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);
}

Beispiel mit switch-Anweisung

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
        }
    }
}

Antworten auf die Frage(4)

Ihre Antwort auf die Frage