我在一个类中有一系列实例函数。还有一个布尔实例变量,用于指定对象状态。几乎所有实例函数都依赖于此布尔状态。他们的身体看起来像
int f() {
if (state) {
//do stuff
}
else {
// do other stuff
}
}
除此之外,某些功能由州交换。因此,如果state为true,那么当用户调用f()时,它实际上就会运行。但是当状态为false时,那么当用户调用f()时会发生什么是antiF()运行。
所以有些函数里面有开关,有些函数完全交换。
如果我用C ++这样做,我可能会使用函数指针。我如何用Java做到这一点?战略模式?
答案 0 :(得分:6)
看起来你想要state pattern。您可以将这些函数拉入状态接口,并为每个状态分别实现,而不是让每个函数检查状态:
public interface State {
void f();
void g();
void h();
}
public class StateA : State {
public void f() { do something; }
...
}
public class StateB : State {
public void f() { do something else; }
...
}
然后,您将维护一个特定的State
实例而不是布尔变量:
State currentState = new StateA();
...
currentState = new StateB();