Использование эксклюзивного метода интерфейса для сравнения без блоков if

У меня следующие интерфейсы:

      public interface Endpoint {
    void reply(HttpExchange exchange, Map<String, String> parameters, boolean prettyPrint);
}

public interface Nameable {
    String getName();
}

public interface Patternable { // I seriously suck at naming, you could also suggest a name for this one
    String getPattern();
}

и иметь класс менеджера, который предоставляет список для хранения конечных точек и метод для получения конечных точек из этого списка. Вот что я сделал для этого метода:

      public Endpoint getEndpoint(String nameORpattern) {
    return endpointList.stream().filter(endpoint -> {
        if (endpoint instanceof Nameable) {
            return ((Nameable) endpoint).getName().equalsIgnoreCase(nameORpattern);
        } else if (endpoint instanceof Patternable) {
            return Pattern.compile(((Patternable) endpoint).getPattern()).matcher(nameORpattern).find();
        } else {
            return false;
        }
    }).findFirst().orElse(null);
}

Но мы все знаем, к чему все идет, спагетти-код ... Итак, мой вопрос: как лучше всего найти и вернуть эту конечную точку?

0 ответов

Другие вопросы по тегам