Я бы, наверное, сделал что-то в районе:
Создайте Rule-класс, который содержит логику для данного правила (ваши операторы if). Правило должно иметь приоритет, чтобы его можно было сопоставить с другими правилами, чтобы определить, какое правило следует рассматривать в первую очередь. Также необходим метод, которому может быть передано неопределенное количество объектов, который проверяет, соответствуют ли эти объекты правилу.
Создайте RuleEngine, который содержит отсортированный список (по приоритету, по приоритету) всех правил. Затем вы передаете объекты, которым вы хотите соответствовать правилам, в двигатель, и двигатель запускает их, прерывая цикл, если выполняется правило:
for( Rule rule : rules ) {
if( rule.check( objects ) ) {
//Do what needs to be done
break;
}
}
Я не знаю, имеет ли это смысл для вас - надеюсь, что это так.
Также, если мы говорим о тысячах правил, это решение не является оптимальным. В этом случае вы захотите определить, какие правила объект может выполнить, прежде чем проверять их (например, если у вас есть два красных и один зеленый, нет необходимости проверять правило «одно из каждого»).