想象一个正在做以下事情的类
class AClass
{
AClass() : mode(0) {}
void a()
{
if (mode != 0) throw ("Error mode should be 0");
// we pass the test, so now do something
...
mode = 1;
}
void b()
{
if (mode != 1) throw("Error mode should be 1");
// we pass the test, so now do something
...
}
int mode;
};
该类包含许多方法(容易超过 20 个),对于这些方法中的每一个,我们都需要检查 mode 的值,这显然是很多代码重复。此外,我们可以识别两类方法,如果 mode !=0 会抛出错误,如果 mode != 1 会抛出错误。是否有可能将这些方法分为两类(类别 A =如果 mode != 0) 抛出错误的方法和如果 mode != 1) 抛出错误的方法的类别 B?
编辑:查看当前答案,我意识到我提出问题的方式,问题可能还不够清楚。我要避免的是必须在类的每个方法中调用一个函数。无论我们是在方法的开头写代码还是把这段代码放在一个函数中并调用这个函数都不是问题。问题是我们是否可以一起避免这一切。是否有一种技术可以帮助根据某些上下文自动检查对类的方法的调用是否有效。
AClass 实际上是我项目上下文中的一个 API。a()、b() 等是程序员可以调用的一些函数,如果她/他想使用 API,但是其中一些方法只能以某种精确的顺序调用。例如,您可以在代码中看到 a() 设置 mode = 1。因此程序员可以执行以下操作:
a(); // mode = 0 so it's good
b(); // mode = 1 so it's good
但是这段代码需要失败(它当然会编译,但在执行时我需要抛出一个错误,指出调用 b() 的上下文是错误的。
b(); // mode 0 so it won't work
a(); // it will compile but throw an exception
我试图看看是否有任何模式可以做到这一点,但根本找不到任何东西。这对我来说似乎是不可能的,我相信唯一的选择就是编写必要的代码。有人可以提出一些建议吗?非常感谢。