Мне нужно выполнить другое действие doAction1(), doAction2() ...
в зависимости от значения и / или типа некоторых переменных и возвращаемого значения некоторых функций.Все комбинации могут быть возможны, в принципе.
Быстрое решение состоит в том, чтобы протестировать все комбинации внутри вложенных операторов if-else
, но полученный код довольно уродлив и его сложно поддерживать и расширять (например, у меня есть новыйусловия для проверки).Ниже приведен пример кода.Я использую Java SE 8:
public static boolean myFunct () {
return true; // hardcoded, it could also return false
}
public static void main(String[] args) {
int x = 1; // hardcoded, it could also be =2
Object o = new String(); // hardcoded, it could also be an Integer
// here I begin to test to decide which action to execute
if (x == 1) {
if (o instanceof String) {
if ( myFunct() ) {
// do this if x==1 AND o is a String AND myFunct() returns true
doAction1();
}
else {
doAction2();
}
}
else if (o instanceof Integer) {
if ( myFunct() ) {
doAction3();
}
else {
doAction4();
}
}
}
else if (x == 2) {
if (o instanceof String) {
if ( myFunct() ) {
doAction5();
}
else {
doAction6();
}
}
else if (o instanceof Integer) {
if ( myFunct() ) {
doAction7();
}
else {
doAction8();
}
}
}
}
private static void doAction8() {
// do some work...
}
private static void doAction7() {
// do some work...
}
private static void doAction6() {
// do some work...
}
private static void doAction5() {
// do some work...
}
private static void doAction4() {
// do some work...
}
private static void doAction3() {
// do some work...
}
private static void doAction2() {
// do some work...
}
private static void doAction1() {
// do some work...
}
. Я читал о шаблоне проектирования RuleEngine, который может элегантно применяться к подобным случаям и заменяет вложенные операторы if-else
, но не могу найти, как реализовать его для моегоcase.
Заранее благодарим за рекомендации.