То, что вы могли бы сделать, хотя я не уверен, что это будет намного лучше, - это некая матрица всех возможных комбинаций двух state
значений;затем вы можете использовать o1.state
и o2.state
в качестве индексов для этой матрицы.
В этой матрице вы можете хранить разные вещи:
- уникальное значение, которое вы можете использовать в качестверазличающее значение для
switch
блока, который заменит ваши if .. else if .. else
блоки - на самом деле не так уж и много улучшений.
Или ваша матрица может содержать ...
- командные объекты.(Посмотрите шаблон Command .)
Если вы действительно хотите избавиться от операторов if
, этот второй вариант может быть лучшим;однако учтите, что ваш код больше не будет располагаться близко друг к другу в одном месте, как в случае с блоками if
/ switch
, а будет распределен между несколькими различными объектами / классами команд.
// forgive my syntax errors etc., my Java has definitely gone a little rusty!
interface WorkCommand {
public abstract void run(MyObject o1, MyObject o2);
}
...
Map<Pair<State,State>, WorkCommand> commands;
// ^ pseudo-code type for your command look-up map; type Pair<X,Y> doesn't exist,
// so replace this with something sensible!
void doWork(MyObject o1, MyObject o2)
{
WorkCommand worker = commands.get(new Pair<State,State>(o1, o2));
worker.run(o1, o2);
}