Это моё решение.Обратите внимание, что у вас есть несколько if...else
в одном методе.И тогда вы добавляете doSomething
.Это будет ужасно, когда все будет готово, а потом и реализовано.
Что насчет перемещения одного отдельного условия в отдельный метод и присвоения ему относительного имени.Затем давайте инкапсулируем его в Consumer
и все это в предопределенный список.Позже, если ваш doSomething
будет огромным, вы можете перейти от одного метода к одному классу, не изменяя код клиента.
Это класс, чтобы собрать необходимую переменную для условий:
final class Data {
private final String a;
private final String b;
private final String c;
}
Затем определите один Consumer
для каждого оператора if
:
Consumer<Data> wonderfulConsumer = data -> {
if (a != null && b == null && c == null) {
// do something for wonderful consumer
}
};
Consumer<Data> badLuckConsumer = data -> {
if (a == null && b != null && c == null) {
// do something for bad luck consumer
}
};
Обратите внимание, все эти потребители могут быть изменены по отдельности (даже в разных классах).
Затем в коде клиента определите список всех известных потребителей: List<Consumer<Data>> consumers = Arrays.asList(wonderfulConsumer, badLuckConsumer)
.
И, наконец, ваш метод будет таким, и вам не нужно его менять, когда вы решите изменить илидобавить потребителей.
Data data = new Data(a, b, c);
consumers.forEach(consumer -> consumer.accept(data));