gpt4 book ai didi

java - 重构 if 语句以使用适当的模式

转载 作者:行者123 更新时间:2023-12-04 11:35:47 25 4
gpt4 key购买 nike

我有一个枚举,里面有一些状态:

enum State
{
A,
B,
C,
D
}

以及具有相应状态的对象:

class MyObject
{
State state;
}

我需要编写一个算法,它接受两个 MyObject 实例并根据这些实例的特定状态执行某些操作:

void doWork(MyObject o1, MyObject o2)
{
if (o1.state == A && o2.state == A)
{
// do something
}
else if (o1.state == A && o2.state == B)
{}
// etc for all combinations...

}

显然这种方法有很多问题,我想改变它以理想地摆脱 if/else 语句。

这样的要求有什么模式吗?

谢谢

最佳答案

可以做的,虽然我不确定它会好得多,是两个 state 值的所有可能组合的某种矩阵;然后,您可以使用 o1.stateo2.state 作为该矩阵的索引。

你可以在那个矩阵中存储不同的东西:

  • 一个独特的值,您可以将其用作 switch block 的区分值,它将替换您的 if .. else if .. else block ——不是很多真的是进步。

或者您的矩阵可能包含...

如果您真的想摆脱 if 语句,第二个选项可能更好;但是请注意,您的代码将不再像 if/switch block 那样在一个位置靠近在一起,而是分布在几个不同的位置命令对象/类。

// 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);
}

关于java - 重构 if 语句以使用适当的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4168285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com